Vererbungsproblem
-
hi,
erstmal das Schema:
// A.h header Datei #ifndef A_H #define A_H #include "B.h" class A : public B // <- hier erscheint der Fehler { // ... }; #endif // B.h header Datei #ifndef B_H #define B_H #include "A.h" class C { //... }; class B : public C { private: A* foobar; }; #endif
Dabei kommt bei public B ein parse error als ob er die Klasse B nicht kennt?
Wie könnte ich das umgehen ohne die Vererbungsbeziehungen der Klassen zu lösen?THX
-
Hallo,
statt// B.h header Datei #ifndef B_H #define B_H #include "A.h" class C { //... }; class B : public C { private: A* foobar; }; #endif
Besser:
// B.h header Datei #ifndef B_H #define B_H class C { //... }; class A; class B : public C { private: A* foobar; }; #endif
-
thx für die Antwort leider kann ich jetzt in der Klasse B nicht auf die Methoden der Klasse A zugreifen (Als Fehlermeldung meldet er undeklarierte Methode).
-
wenn du die Methoden von B in B.cpp definierst, kannst du doch da die A.h einbinden, oder?
-
hmm so funktioniert es aber ist es gut in der b.cpp ein noch ein #include "A.h" zu schreiben.
Na ich probiers erstmal so aus thx hoffe ich bekomm später deswegen keine Schwierigkeiten.
-
Wieso sollte es schlecht sein?
-
Michael E. schrieb:
Wieso sollte es schlecht sein?
kann ich dir nicht sagen war ja auch eher ne frage von mir
Dachte weil man sonst ja alle #include anweisungen in die header schreibt wieso man das immer macht weiss ich nicht vielleicht wegen der übersicht halt aber vielleicht hat es ja auch ein anderen Grund. Aber anscheinend nicht.
-
Aber hab noch eine Verständniss Frage die vielleicht noch beantwortet werden könnte.
Die Preprozessor Anweisungen wenn ja vorm compilieren ausgewertet. Aber in welche Reihenfolge geschied das? So wie die cpp und h Dateien z.B. in der Makefile stehen? Oder kann das der Compiler selber herausfinden welches include Datei zuerst benötigt wird?
-
x schrieb:
Dachte weil man sonst ja alle #include anweisungen in die header schreibt
Im Gegenteil, man sollte soagar so wenig wie möglich in Headern inkludieren, weil sonst unnötige Kompilierabhängigkeiten entstehen.
-
x schrieb:
Aber hab noch eine Verständniss Frage die vielleicht noch beantwortet werden könnte.
Die Preprozessor Anweisungen wenn ja vorm compilieren ausgewertet. Aber in welche Reihenfolge geschied das? So wie die cpp und h Dateien z.B. in der Makefile stehen? Oder kann das der Compiler selber herausfinden welches include Datei zuerst benötigt wird?Da kann ich auch nur raten. Aber ich kann dir versichern, dass du die Antwort nicht zum Programmieren brauchst (jedenfalls die nächsten fünf Jahre noch nicht).
-
Zum Präprozessor (PP):
Jede einzelne Quellcode-Datei (.cpp, .c, ...) wird zuerst durch den PP abgehandelt, d.h. die include-Dateien eingebunden, die defines aufgelöst etc.
Danach wird diese Datei vom Compiler geparst und in Assemblercode bzw. weiter nach Objectcode übersetzt. Zum Schluß werden vom Linker alle Objectdateien zu einer EXE bzw. DLL zusammengebunden.Wenn man keine vordefinierten Headerdateien benutzt, werden alle include-Dateien mehrfach eingebunden und geparst, wenn sie von mehreren Quellcode-Dateien benutzt werden.
-
x schrieb:
Aber hab noch eine Verständniss Frage die vielleicht noch beantwortet werden könnte.
Die Preprozessor Anweisungen wenn ja vorm compilieren ausgewertet. Aber in welche Reihenfolge geschied das? So wie die cpp und h Dateien z.B. in der Makefile stehen? Oder kann das der Compiler selber herausfinden welches include Datei zuerst benötigt wird?das findet der präprozessor selbst raus. er macht das in der reihenfolge, in der die präprozessor-anweisungen im quelltext stehen.
make, die ide oder andere programme haben darauf keinen einfluß. das macht der präprozessor völlig eigenständig.