Forward Deklaration
-
Folgende Sache:
class B; class A { public: B* Binstanz; inline void Do() { Binstanz = new B; B->Anything(); // KABOOM - kennt er nicht bei Forward, aber wie mach ichs dann ? } }; class B { public: void Anything(); };'status' ist kein Element von 'Launcher', weil der Typ nicht definiert ist
-
Klasse B vor Klasse A definieren.
-
B->Anything();
Deine Instanz heißt 'Binstanz'.
edit: Ich verstehe die Fehlermeldung nicht, wo ist 'status' und 'Launcher' definiert?
Thingol

-
Ok ich hab was vergessen:
class B; class A { public: void AnythingA(); B* Binstanz; inline void DoB() { Binstanz = new B; Binstaz->AnythingB(); } }; class B { public: void AnythingB(); A* Ainstanz; inline void DoA() { Ainstanz = new A; Ainstanz->AnythingA(); } };Hat sowas eigentlich ein Namen ?
Launcher ist Klasse B, status ist in Klasse B.
Klasse A will auf Klasse B zugreifen.
Aber das will er nicht haben
-
this->that schrieb:
Klasse B vor Klasse A definieren.
Wie 'this->that' schon erwähnt hat, muss die Definition vor 'A' erfolgen. In deinem Fall in eine Header-Datei.
Das 'inline' ist meines Wissens nicht notwendig, weil du die Methode ja schon in der Klassendefinition definierst -> inline. (Ich lasse mich eines besseren belehren, falls die Aussage falsch war).
edit: Irgendwie bin ich mir doch nicht mehr so sicher...
Thingol

-
d.h. Ich muss sie in 2 header, mit includeguards tun ?
-
Tim06TR schrieb:
...Hat sowas eigentlich ein Namen ?...
Designfehler?!
-
Tim06TR schrieb:
d.h. Ich muss sie in 2 header, mit includeguards tun?
Nein.
class B; class A { public: void AnythingA(); B* Binstanz; inline void DoB(); // inline }; class B { public: void AnythingB(); A* Ainstanz; void DoA() // implizit inline { Ainstanz = new A; Ainstanz->AnythingA(); } }; A::A() { Binstanz = new B; Binstaz->AnythingB(); }
-
-
Tim06TR schrieb:
Ok ich hab was vergessen:
class B; class A { public: void AnythingA(); B* Binstanz; inline void DoB() { Binstanz = new B; Binstaz->AnythingB(); } }; class B { public: void AnythingB(); A* Ainstanz; inline void DoA() { Ainstanz = new A; Ainstanz->AnythingA(); } };// fwd declarations class A; // für A nicht nötig, schadet aber auch nicht class B; // für B sehr wohl nötig // class definitions class A { public: void AnythingA(); B* Binstanz; void DoB(); }; class B { public: void AnythingB(); A* Ainstanz; void DoA(); }; // inline functions inline void A::DoB() { Binstanz = new B; Binstaz->AnythingB(); } inline void B::DoA() { Ainstanz = new A; Ainstanz->AnythingA(); }Hat sowas eigentlich ein Namen ?
Zyklische Abhängigkeit (cyclic dependency) bzw. auch Zirkuläre Abhängigkeit (circular dependency).
Im Deutschen ist Zyklische Abhängigkeit gebräuchlicher, im Englischen eher circular dependency.
-
Das ich darauf nicht selbst gekommen bin

-
Tim06TR schrieb:
Das ich darauf nicht selbst gekommen bin

Würde auch in dem von mir gepostetem Link stehen..