Forward Deklaration
-
hi
kan mir mal jemand genau u einfach (viell mit einfach klassenbsp.) erklären warum,wie man forward deklarationen braucht? und warum das includieren der jeweiligen header dateien nicht reicht?thx
-
// a.h class A { B* pb; }; //b.h class B { A*pa; };
Okay, das kompiliert nicht. Wir könnten dann einfach jeweils den anderen Header mit einbinden am Anfang. Aber dann würden wir ne unendliche Rekursion machen. Fakt ist: Wenn ich a einbinden möchte muß b schon eingebunden sein, aber das geht nur wenn a schon eingebungen ist...
Ausweg: Forward Deklaration. Einfach ein class A; bzw. class B; in b.h bzw. a.h und die Sache funktioniert.
MfG jester
-
Außerdem solltest du die Forwarddeklaration vorziehen wenn es möglich ist, weil es dann wesentlich schneller kompiliert!
-
Und wie mache ich da ganze ohne Zeiger?
Ich habe folgendes versuchtclass a; class b; class a { b m_b; }; class b { a m_a; };
und bekomme die Fehlermeldung:
'm_b' verwendet undefiniertes class 'b'MfG
-
Das funktioniert natürlich nicht, du hasst die klasse ja erst deklariert und noch nicht definiert (oder ist umgekehrt?). wenn man "b m_b;" aufruft, wird ja der Standard Konstruktor aufgerufen, nur gibt es den noch nicht.
-
ohne zeiger klappt es garnicht.
denn:
A beinhaltet ein B welches ein A beinhaltet. Doch A beinhaltet ein B, was wiederrum ein A beinhaltet und dies beinhaltet ein B, etc.
du verstehst?