Frage zu Zeiger auf Klassen und Klassendeffinitionen in Headern [gelöst]
-
Ich habe 2 kleine Fragen,
wenn ich 2 Klassen habe die jeweils eine Variable oder einen zeiger vom Typ der anderen habe, oder Methoden die ein Object der anderen Klasse annehmen
//headera class A { B *b; void in(B *b); }; //header b class B { A *a; };und diese wie oben in getrennten Header deffiniert sind, gibt es eine Möglichkeit das zum laufen zu bekommen? Der Compiler meckert ja das er die jeweils andere Klasse im Header nicht kennt, oder bleibt nichts anderes übrig als beide Deffinitionen zusammenkopieren?
Und meine 2. Frage bezieht sich auf Zeiger auf Klassen. Ich habe eine Klasse A und eine Klasse B, Klasse a Verwaltet ein Array aus Bs, wenn ich jedem B einen Zeiger auf die Klasse A überstelle, wieso lästd er Compiler keine Zugriffe auf die Methodend er Klasse A zu.
Bsp:
class B; //bekanntmachung class A { private: B array[2]; public: void go() { array[2].setpointer(this) }; void start() {}; }; class B { private: A *a; public: void setpointer(A *pt) { a=pt; a.start(); //wieso verweigert sich der compiler hier? }; }; };Wieso verweigert der Compiler diesen zugriff als nicht Möglich? sollte das Object der Klasse B nicht über das this von Klasse A zugriff auf diese bekommen und damit Methoden aufrufen können?
-
Xebov schrieb:
und diese wie oben in getrennten Header deffiniert sind, gibt es eine Möglichkeit das zum laufen zu bekommen?
Ja, jeweils mit einer Forward Declaration der anderen Klasse. Für Zeiger reicht die.
Xebov schrieb:
wieso lästd er Compiler keine Zugriffe auf die Methodend er Klasse A zu.
Weil du . benutzt. Für Zeiger brauchst du ->. Das ist aber nicht das einzige Problem. Für das B-Array oder die B-Methodenaufrufe in A reicht die Forward Declaration von B nicht.
Und falls das nicht das ist, was du meintest, solltest du die tatsächliche Fehlermeldung posten, nicht "der Compiler verweigert sich / diesen Zugriff".
-
MFK schrieb:
Und falls das nicht das ist, was du meintest, solltest du die tatsächliche Fehlermeldung posten, nicht "der Compiler verweigert sich / diesen Zugriff".
Die Fehlermeldung war, egal ob . oder ->, das die linke Seite des Befehls eine class/struct/union sein muß, und ob ich nicht -> meinte statt . aber die Meldung kommt auch bei ->.
EDIT:
Habs gelöst jetzt funktionierts, danke für den Tip.