Deklarieren Sie ein Objekt, noch bevor diese Klasse erstellt wird

7

Gibt es überhaupt ein Objekt einer Klasse zu deklarieren, bevor die Klasse in C ++ erstellt wird? Ich frage, weil ich versuche, zwei Klassen zu verwenden, die erste muss eine Instanz der zweiten Klasse enthalten, aber die zweite Klasse enthält auch eine Instanz der ersten Klasse. Ich weiß, dass Sie vielleicht denken, ich könnte in eine Endlosschleife geraten, aber ich muss tatsächlich eine Instanz der zweiten Klasse vor der ersten Klasse erstellen.

    
Matt Pascoe 22.09.2008, 06:04
quelle

5 Antworten

37

Sie können so etwas nicht tun:

%Vor%

Das offensichtlichste Problem ist, dass der Compiler nicht weiß, wie groß er Klasse A machen muss, weil die Größe von B von der Größe von A abhängt!

Sie können dies jedoch tun:

%Vor%

Wenn Sie Klasse B als Vorwärtsdeklaration deklarieren, können Sie Zeiger (und Verweise) auf diese Klasse verwenden, ohne die gesamte Klassendefinition zu haben.

    
Greg Hewgill 22.09.2008, 06:08
quelle
5

Sie können keine Instanz einer undefinierten Klasse deklarieren, aber Sie können einen -Zeiger zu einem deklarieren:

%Vor%     
Adam Pierce 22.09.2008 06:07
quelle
2

Es gibt eine elegante Lösung mit Vorlagen.

%Vor%      

Dieser Code wird funktionieren! Also, warum?   Arbeit? Der Grund hat damit zu tun   Vorlagen werden kompiliert. Vorlagen   verzögern die Erstellung von Funktionen   Signaturen, bis Sie tatsächlich die   Vorlage irgendwo. Das bedeutet, dass   weder getA () noch getB () werden haben   ihre Unterschriften werden bis nachher ausgewertet   Beide Klassen A und B waren bereits   vollständig erklärt. Das ist die Magie von   diese Methode.

    
tfinniga 22.09.2008 16:04
quelle
0

Ist das nahe an dem, was Sie wollen: Die erste Klasse enthält die zweite Klasse, aber die zweite Klasse (die zuerst erstellt werden soll) hat nur einen Verweis auf die erste Klasse?

    
Chris Jester-Young 22.09.2008 06:08
quelle
0

Dies wird als Querverweis bezeichnet. Siehe hier ein Beispiel.

    
INS 22.09.2008 06:11
quelle

Tags und Links