was muss ich beachten wenn ich in meinem Programm selberstellte Include Dateien einbinden will. Konkretes Beispiel.. Ich habe eine Datei mit dem Namen TEXT.h in der einfach nur steht: cout << "gib diesen verdammten Text endlich aus" ; Versuche ich diese Datei mittels Include in Programm einzubinden mit include "Text.h" (Datei steht im Verzeichniss wo auch das Programm ist) will das irgendwie nicht so recht gelingen.
Hast Du schon
1 | http://www.mikrocontroller.net/articles/Include-Files_(C) |
gelesen ? ( Sorry - ich bekomme den Link nicht als richtigen Link hin - wegen des (C) am Ende. Kann mir jemand sagen wie ich das formatieren müsste, so dass es geht ? )
Die Anweisung steht so wie von dir angegeben nicht in einer Funktion drin. Sie steht "im leeren Raum". Es ist auch gute Programmierpraxis wenn man keine Anweisungen in Includedateien packt. Deklarationen gehören in *.h Includedateien. Definitionen und Anweisungen gehören in *.c bzw. *.cpp Dateien.
Es geht ja jetzt nur um das verstehen des einbindens. Falls es weiterhilft der Compiler gibt folgende Meldung aus: 17 C:\Dev-Cpp\includesinus.cpp In file included from C:\Dev-Cpp\includesinus.cpp 12 C:\Dev-Cpp\TEXT.h expected constructor, destructor, or type conversion before '<<' token 12 C:\Dev-Cpp\TEXT.h expected `,' or `;' before '<<' token
Überlege es Dir mal folgendermassen. ein #include wird vom Preprozessor gemacht. Der eigentlich compiler bekommt das gar nicht mit. Die kannst Dir vorstellen, dass der Preprozessor dort wo "#include <xxx.h>" steht, wirklich den Inhalt der Datei xxx.h in Deinen Sourcecode hineinkopiert. Du hast z.B.
1 | #include "TEXT.h" |
2 | |
3 | int main(void) |
4 | {
|
5 | ....
|
6 | }
|
daraus wird
1 | cout << "gib diesen verdammten Text endlich aus" ; |
2 | |
3 | int main(void) |
4 | {
|
5 | ....
|
6 | }
|
Und - wie Stefan schrieb - die "cout" Anweisung steht im Nirwana. In die .h Datei soll nur das rein, was an der Stelle, an der das #include steht, auch hin dorf und Sinn macht. Natuerlich könntest Du so was machen :
1 | int main(void) |
2 | {
|
3 | #include "TEXT.h" |
4 | |
5 | ....
|
6 | }
|
Würde wohl gehen - aber das ist nicht der Sinn von .h Dateien. Das macht man nicht.
das dass wenig Sinn macht ist mir schon in dem Fall klar. Ich versuche hier nur ein Beispiel durzuarbeiten was in einem Buch beschrieben ist (natürlich nicht mir dem Text da oben ;-) ). Ich habe die Include Anweisung in der Main Funktion, aber irgendwie macht das der Compiler nichtmit, und bricht mit der obrigen Fehlermeldung ab. Mir geht es momentan mehr darum wo da der Fehler liegt. Ob das cout in der Text.h jetzt Sinn macht oder nich, soll jetz mal beiseite gestellt werden. Sinn macht die Include Text.h mit sicherheit nicht.
Ingo Laabs wrote: > nichtmit, und bricht mit der obrigen Fehlermeldung ab. Mir geht es > momentan mehr darum wo da der Fehler liegt. Der Fehler liegt daran, dass du noch nicht verstehst, wie das Zusammenspiel von Präprozessor und eigentlichem Compiler vonstatten geht. > Ob das cout in der Text.h > jetzt Sinn macht oder nich, soll jetz mal beiseite gestellt werden. Genau darum gehts aber. Die Ausgabeanweisung macht an dieser Stelle absolut keinen Sinn und ist dort auch nicht erlaubt. Es spielt jetzt keinerlei Rolle, ob du die Ausgabeanweisung direkt in deinem includesinus.cpp drinnen stehen hast, oder ob die Anweisung über einen #include reingezogen wird. Letztendlich sieht der Compiler eh in beiden Fällen dasselbe: Eine Anweisung die nicht in einer Funktion enthalten ist. Und da der Compiler davon ausgeht, dass du das weißt und keinen dummen Fehler gemacht hast, versucht er dir in seiner Fehlermeldung irgendwas anzubieten, was die Situation retten könnte. Das du wirklich nur einen dummen Fehler gemacht hast, hat er nicht erkannt. Und drum ist die Fehlermeldung für dich ziemlich nichtssagend.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.