Klassen mit Kreisreferenz
-
hi
Habe ein Problem. Brauche in zwei Klassen jeweils eine Referenz auf die andere. Doch das gibt Probleme bei der Konstruktion.
class A { public: A( B& b) : m_b( b ) {} private: B& m_b; }; class B { public: B( A& a) : m_a( a ) {} private: A& m_a; };
Wie kann ich die Zwickmühle lösen?
Danke im vorraus
-
Auf die Weise gar nicht (das Ziel der Referenz muß existieren, bevor du darauf verweisen kannst, also hast du ein Problem, in welcher Reihenfolge A und B angelegt werden können). Aber du könntest Pointer (die sind nicht so restriktiv wie Referenzen) und Forward-Deklarationen verwenden.
(PS: Wozu soll das gut sein? Und warum verschmilzt du nicht beide Klassen zu einer Einheit?)
-
Also Klasse A ist das Spiel selbst, Klasse B der Spieler.
Die beiden rufen sich gegenseitig Methoden ab.
Der Spieler kann auch ausgetauscht werden.
-
G. Kreisler schrieb:
Der Spieler kann auch ausgetauscht werden.
Dann hast Du auch schon die Referenz die keine sein darf. Denn bei Referenzen kann das referenzierte Objekt nicht ausgetauscht werden.
-
G. Kreisler schrieb:
Der Spieler kann auch ausgetauscht werden.
Ein klarer Punkt gegen Referenzen (die kannst du nämlich NICHT austauschen) - damit bleiben zumindest hierfür nur noch Zeiger:
class player;//forward Deklaration class game { player* m_player; public: game() : m_player(NULL) {} void set_player(player* the_player) { m_player=the_player; } }; class player { game& m_game; public: player(game& the_game) : m_game(the_game) {} }; ... game G; player P(G); G.set_player(&P); ...
-
void set_player(player &the_player) { m_player = &the_player; }Find ich so schöner.

-
Ok, danke euch.
Mag zwar keine Zeiger, aber passt so wohl.