Kommunikation zwischen Objekten (in C++)
-
Hallo,
ich habe grade diesen Thread im Java Forum gelesen und stehe nun genau vor diesem Problem in C++.
Folgende Problemstellung:
//A.H #include "B.H" class A { public: A(); void methode(); private: B b; } //A.cpp A::A(){ b = new B(this); } //B.H #include "A.H" class B{ B(A* a); } //B.cpp B::B(A* a){ a->methode(); }
Das Problem ist ja nun, dass beim compilieren der einen Klasse, die andere noch nciht bekannt ist und ein Deadlock entsteht.
Könnte mir bitte jemand auf die Sprünge helfen, wie man so etwas löst?
In Java muss man sich ja zum Glück nicht mit Headerfiles herumplagen, insofern bringt mich die Lösung im Thread nciht so wirklich weiter
Danke schön
-
So kannst du es lösen: Im Header nur eine Forward declaration benutzen.
Und nur in der cpp Datei den fremden Header benutzen.
-
also in B.cpp A.h einbinden und nicht in B.h
-
Hi,
danke für die Antwort. Wenn ich das so mache, ist laut Compiler Error aber A inder Klasse B nicht bekannt. include ich B.H in A.H hinter der Klassendefinition von A ist B natürlich A wieder nciht bekannt
Oder hab ich Dich falsch verstanden?
-
class B;
vor die definition von A schreiben - und natürlich b zu einem Zeiger machen
-
Ja, so hatte ich das verstanden, dann moniert er mir bei
class b{ public: B(int x, A* y); }
bei y ein unknown Token.
-
Ah, hab natürlich falsch herum gedacht, vor B muss natürlich ein Class A:
So, und wnen ich jetzt noch die ganzen Linker Fehler kille, die durch die Aktion entstanden sind, hab ichs geschafft. Danke für die Hilfe