Weil A
ein unvollständiger Typ ist, weil er noch nicht definiert wurde, sondern definiert wird. Und der Compiler muss den vollständigen Typ von A
kennen, wenn er ihn in class A
sieht, und da A
unvollständig ist, kann seine Größe nicht bestimmen, kann nicht strong> bestimmt, wie viel Platz die Membervariable a
einnehmen soll, daher wird sie nicht kompiliert.
Aber die Größe eines Zeigers ist dem Compiler wohlbekannt, egal, um welchen Zeigertyp es sich handelt. Sie können einen Zeiger in Ihrer Klasse wie folgt definieren:
%Vor%Online-Demo: Ссылка
In C ++:
Sie können dies nicht tun, da es rekursive Struktur (kein Ende für die Berechnung der Objektgröße) sein wird, um dieses Problem zu überwinden,
Verwenden Sie den selbstreferentiellen Zeiger, d. H. Den Zeiger mit der Adresse des gleichen Klassentyps.
Dieses Beispiel wird in "Bjarne Stroustrup Die C ++ Programmiersprache - 3. Ausgabe" gegeben.
Und es funktioniert ... Eine Erklärung wäre nett.
Tags und Links c++