Klasse A in B und umgekehrt ..

ernii

Mitglied
Hallo

ich bin eigentlich gerade viel zu müde um über soetwas nach zudenken aber mir fällt gerade einfach nicht ein wie man das vernünftig macht ...
Falls es schon einen thread dazu gibt war des keine absicht ... hab beim suchen nichts gefunden aber mir viel auch kein vernünftiger Suchbegriff ein.

Also ich möchte ungefähr folgendes machen:

Code:
Class KlasseA
{
 KlasseB child;
};
Class KlasseB
{
 KlasseA parent;
};

Nunja das geht natürlich nicht ... bei KlasseA kennt der Compiler KlasseB noch garnicht und meckert das er den typ nicht kennt ....

Mir scheint so als würde dieses Problem dauernd vorkommen (naja zumindest öfters) also sollte es doch eine tolle Standartlösung geben. Oder will nur ich so komische Klassenkontruktionen fabrizieren?

Ich erinnere mich auch öfter mal das selbe Problem in Delphi gehabt zu haben.
Dort hab ich das Problem meist so gelöst, dass z.B. child als einen typenlosen Pointer genommen haben und in der Implementation der Funktion (dann ist die KlasseB ja bekannt) einen Typecast gemacht habe um es entsprechend zu benutzen .... aber das ist natürlich nicht typensicher ... (ok der Hauptgrund warum ich es jetzt nicht benutze ist das ich unter C++ mit den Zeigern noch nicht ganz so sicher bin und es einfach nicht hinbekommen habe .... ;) )

Also ich würd mich freuen wenn mir da jemand weiter helfen könnte und wünsche ansonsten noch gut nacht ...
 
Hi,

ich bin nicht so ganz sicher, ob das alles richtig ist, was ich jetzt von mir gebe - aber hast Du schonmal versucht, mit einer Vorwärtsdeklaration die Typen schon vor der "Implementierung" bekannt zu machen?
Aber trotzdem hast Du unter Umständen das Problem, dass die beiden Klassen sich gegenseitig immer wieder aufrufen können, wenn ich das richtig sehe.

Gruss, Dario
 
Das Problem loesst man mit Pointern,
denn wenn ich das richtig sehe willst Du einen Baum erstellen oder so aehnlich,
dann wuerden dir die Kopien von child und parent wenig nutzen.

Code:
class KlasseA;  // Vorwaertsdeklaration von KlasseA, muss nicht sein 
class KlasseB;  // Vorwaertsdeklaration von KlasseB 

class KlasseA
{
    KlasseB* child;
};

class KlasseB
{
    KlasseA* parent;
};
 
die vorwaertsdeklaration haette auch gereicht
das ist nicht richtig,
denn um ein member erstellen zu koennen muss der Kompiler wissen wie gross dieses ist um den Speicher reservieren zu koennen.
Mit einer Vorwaertsdeklaration kennt der Kompiler die tatsaechliche Groesse einer Instance von der Klasse nicht.

Also wuerde eine Vorwaertsdeklaration nicht reichen.
 
Zurück