Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Fehlermeldung beim Einbinden einer Include-Datei

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
15.02.2006, 22:33 Uhr
Marco15



Hi Leuts!

Ich wollt mich jetzt mal drin versuchen, verschiedene Codestücke auf mehrere Codestücke aufzuteilen. Doch wenn ich in meinem Hauptprogramm die Funktion, die in der Includedatei beschrieben wird, aufrufe, bekomme ich eine Problemmeldung und ich werde nur gefragt ob ich den Problembericht absenden will. Aber keiner sagt mit, was überhaupt los ist. Nur das:
Unbenannt1.exe hat ein Problem festgestellt und muss beendet werden.

Das sind meine beiden Datein:
Datei: Unbenannt1.cpp (Includedatei für die Funktion)


C++:
#include <iostream>


using namespace std;

string Name()
{
       cout << "Hallo";
}



Ist zwar trivial, aber dient ja nur als Übung.

2.Datei, das Hauptprogramm, worin ich Unbenannt1.cpp einbinde


C++:
#include <iostream>
#include "Unbenannt1.cpp"
using namespace std;


int main()
{
    char Hallo;
    cout << "Hallo";
    cin >> Hallo;
    Name();
    system("pause");
    return 0;
}



Die ersten drei Zeilen der Main-Funktion haben keinen großen Sinn, ich wollte nur testen, ob das Programm schon vor dem Aufrufen der Name() Funktion auftritt. Und das tut es nicht. Erst wenn "Hallo", also das von der Name() Funktion ausgegeben wird, kommt die Fehlermeldung.Warum meine Funktionen so unzusammenhängende Namen haben? Ursprünglich sollte es was anderes werden. Ich wollte nur mal testen.

Kann mir wer helfen..

LG Marco


PS: Hab Schon versucht den Pfad der Include Datei direkt umzuänder, das heißt genau den Pfad angegeben (zB C...\Dev-Cpp\...)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.02.2006, 22:43 Uhr
KaraHead



Bin zwar ein bischen aus der Übung aber ich bin mir sicher, dass man nie .cpp Dateien includen darf. Es dürfen nur Header eingebunden werden.

Bennen deine Unbenannt1.cpp in Unbenannt1.h um und ändere nach #include "Unbenannt1.h" .

Dieser Post wurde am 15.02.2006 um 22:45 Uhr von KaraHead editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.02.2006, 22:48 Uhr
Spacelord
Hoffnungsloser Fall


Hallo,
im Allgemeinen bindet man keine cpp Dateien ein sondern Headerdateien.
Dabei sind dann im Header die Deklarationen und in der cpp Datei dann die Funktionsdefinitionen.Der Compiler erstellt daraus dann ne Objektdatei.
Wenn du dann den Header in eine weitere Übersetzungseinheit einbindest benötigt diese erstmal nur die Funktionsdeklaration um den Rest kümmert sich am Schluss der Linker.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.02.2006, 23:15 Uhr
Marco15



Hmm...Die Fehlermeldung kommt immernoch. Im Hintergrund der Fehlermeldung erkennt man aber, dass das Hallo der Funktion ausgegeben wird, aber es muss irgendwo ein Fehler drin sein. Vielleicht auch gar nicht mal im Programm selbst. Vielleicht haut ja irgendwoanders was nicht hin.

Thx für die Antworten

LG Marco
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.02.2006, 23:26 Uhr
Marco15



Ahhhh. Hab den Fehler. Schaut euch mal genau meine Funktion Name an. Fällt euch was auf?

Ich hab die Funktion mit string initialisiert. Aber die Funktion gibt ja gar keinen Wert zurück. Also müsste es void lauten. Und so funktioniert das Programm jetzt auch. Aber komisch, dass C++ nicht von alleine gemeckert hat und sich erst ein Windows Fenster geöffnet hat, statt einer Warnung vom Compiler oder so.

Jedenfalls danke für eure Hilfe

Lg Marco
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
16.02.2006, 08:20 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


DevCPP? der ist in der Hinsicht verbuggt.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
16.02.2006, 09:02 Uhr
ao

(Operator)



Zitat von KaraHead:
Bennen deine Unbenannt1.cpp in Unbenannt1.h um und ändere nach #include "Unbenannt1.h" .

Das ist Unsinn, es ist piepegal, wie die Datei heißt.

Es ist nur in vielen Fällen sinnvoll, die Deklarationen (Prototypen) in Header zu packen und zu inkludieren und die Definitionen (Funktionskörper) in eigene "Übersetzungseinheiten" zu stecken, getrennt zu kompilieren und erst am Schluss alles zusammenzubinden (Linken)

Sinnvoll deswegen, weil man damit große Projekte in kleinere Teile zerlegen und diese von mehreren Entwicklern parallel bearbeiten lassen kann, und weil man, wenn man es geschickt anfängt, fertig übersetzte, sofort wiederverwendbare Objectcode-Bibliotheken erhält. Man spart sich das Immer-wieder-Übersetzen von längst fertigem Quellcode.

Es gibt aber keinen Zwang, das so zu machen, man kann genausogut dreißig große C-Dateien schreiben, alle zusammen in einer main.c inkludieren und am Stück durch den Compiler jagen. Die Compile-Zeit nimmt zwar erheblich zu, und man kriegt möglicherweise Reihenfolge-Probleme, die man mit Vorwärtsdeklarationen lösen muss, also kommt man bei realen Projekten ganz ohne Header wohl nicht aus. Aber technisch geht das.

In C++-Klassenbibliotheken ist es auch üblich, bei kleineren oder sehr elementaren Klassen die Implementierung direkt in die Klassendefinition zu schreiben, so dass die Klasse inklusive Code in einem .h-File liegt und die Regel "keinen Code inkludieren" hier schon aufgeweicht wird.

Und spätestens bei Templates geht es gar nicht mehr anders.

Gruß,
ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
16.02.2006, 09:57 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von ao:

Und spätestens bei Templates geht es gar nicht mehr anders.


Naja, da steht in dem Header ja auch nur die Deklaration, wirklich "implementieren" tut das dann ja der Compiler an der entsprechenden Stelle. Natürlich, rein von der Optik her (Beweis durch Optik *gg*) ist da natürlich die Implementation im Header "mit drin" bei Templates.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: