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.
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.
Sie können keine Instanz einer undefinierten Klasse deklarieren, aber Sie können einen -Zeiger zu einem deklarieren:
%Vor%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.
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?
Tags und Links class c++ object instantiation