Include Problem
-
Ich habe 2 Klassen (ClassA, ClassB)
Ich möchte von jeder Klasse auf die Methoden der anderen Zugreifen.
ClassA.h:#pragma once #include "ClassB.h" class ClassA { public: ClassA(void); ~ClassA(void); ClassB b; };ClassB.h:
#pragma once #include "ClassA.h" class ClassB { public: ClassB(void); ~ClassB(void); ClassA A; };Ich erhalte folgende Fehler:
ClassA.cpp classb.h(8) : error C2146: syntax error : missing ';' before identifier 'A' classb.h(8) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int classb.h(8) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int ClassB.cpp classa.h(8) : error C2146: syntax error : missing ';' before identifier 'b' classa.h(8) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int classa.h(8) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-intWenn ich aus einer .h Datei das include und die Erzeugung des Objekts weglasse dann läuft das Programm.
Mache ich irgendwas falsch oder geht das gar nicht dass beide Klassen auf die jeweils andere zugreifen?
-
Gegenseitiges inlcude funzt nicht. Denn bei einer der beiden Klassen kennt der Kompiler nicht die Deklaration der anderen...
Hier hilft nur Vorwärtsdeklaration...
-
muffmolch schrieb:
Gegenseitiges inlcude funzt nicht. Denn bei einer der beiden Klassen kennt der Kompiler nicht die Deklaration der anderen...
Hier hilft nur Vorwärtsdeklaration...
Zudem wäre es noch in einen weiteren Punkt fatal wenn es Funktionieren würde sofern mindestens ein Element hinzukommt (A enthält B, enthält A, enthält B...).
Wie hängen die beiden Klassen logisch zusammen?
Was benötigt die jeweilige Klasse von der anderen?cu André
-
Eine Klasse ist ein MFC-Dialog der auf die Methoden aus der anderen zugreift.
In der anderen Klasse wird in einer Methode ein Pointer auf die MFC-Klasse benötigt um auf die Steuerelemente zuzugreifen.Vorwärtsdeklaration müsste ja so funktionieren?!?
class ClassA; class ClassB { ClassA a; .... }; class ClassA { Classb b; .... };und wie wenn ich die Klassen in getrennten Dateien habe??
-
ansich funktioniert Vorwärtsdeklaration so. Da der Kompiler aber die Größe von der einen Klasse nicht kennt, kann diese kein Member der anderen Klasse sein, sondern lediglich ein Pointer darauf... Ein Pointer hat nämlich eine definierte dem Compiler bekannte Größe. zudem darfst du auf keien Methode der anderen Klase in der Deklararion zugreifen. Erst später bei der Implementierung.
-
danke!! es funzt
-
aber nicht so, wie du es oben geschrieben hast, oder?
denn dort sollte folgerichtig die Fehlermeldung:
error C2079: 'classA::b' uses undefined class 'classB'erscheinen