Klassenproblem
-
Hallo,
wie krieg ich den folgenden Code zum laufen.
class A { void call { b.func(); //Geht nicht, da b ja noch nicht definiert ist!!! } }; class B { void func() { /*mach irgendwas */ } A wichtigesobjekt; //Brauche Klasse A unbedingt in Klasse b. }; B b;Vielleicht kennt irgendjemand eine Möglichkeit oder einen Link.
Danke
-
class A { void call(); }; class B { void func() { /*mach irgendwas */ } A wichtigesobjekt; //Brauche Klasse A unbedingt in Klasse b. }; B b; void A::call { b.func(); //Geht nicht, da b ja noch nicht definiert ist!!! }
-
Juhu,
da wär ich jetzt nicht draufgekommen.
Danke, wirklich eine gute Idee.
-
Schau mal hier rein:
fehler bei querverweis #include".." von header datei
Was Du brauchst ist forward deklaration ?!?
-
Nein, forward-Deklarationen bringen ihm nichts. An den Stellen, wo er die jeweils andere Klasse benötigt, muß sie komplett bekannt sein (Methodenaufruf bzw. Variablendefinition). Wenn in B ein Pointer oder eine Referenz auf A wär, sähe das anders aus.
BTW: Man könnte die Funktion noch inlinen.
-
Stümmt total übersehen. Aber was spricht denn gegen einen Zeiger an der stelle ?

[ Dieser Beitrag wurde am 19.03.2003 um 13:52 Uhr von Knuddlbaer editiert. ]
-
Original erstellt von Knuddlbaer:
**Stümmt total übersehen. Aber was spricht denn gegen einen Zeiger an der stelle ?
**soll ich jetzt echt einen lehrer zitieren, der festgestellt hat, daß zeiger in OO nix zu suchen haben?
also hier hat ein zeiger echt nix zu suchen, da er nur lahm macht.
-
dann nimmt man halt ne Referenz. Das zweite (Nicht-)Problem löst das allerdings nicht.
-
Dumdidum
-
Bashar schrieb:
dann nimmt man halt ne Referenz. Das zweite (Nicht-)Problem löst das allerdings nicht.
1. Funktionieren Referenzen in Klassendeklarationen doch gar nicht, weil sie nicht sofort initialisiert werden (oder geht das in der Initialisierungsliste in der Konstruktordeklaration?).
2. Ist das Problem bei Referenzen doch genau das gleiche wie bei Pointern, nämlich, dass erst Platz für das Objekt auf dem Heap allokiert werden muss.
-
Bei einem Benutzernamen "NecroThreadsReanimator" dürfte man also wirklich skeptisch werden...
-
NecroThreadsReanimator
xD Hat funktioniert
1. Funktionieren Referenzen in Klassendeklarationen doch gar nicht, weil sie nicht sofort initialisiert werden (oder geht das in der Initialisierungsliste in der Konstruktordeklaration?).
Doch, das geht in der Initialisierungsliste.