class A
{
A a;//why can't we do this
};
Antworten
Zu viele Anzeigen?A a;//why can't we do this
Denn A
ist ein unvollständiger Typ, da er noch nicht definiert wurde, sondern noch definiert wird. Und der Compiler muss den vollständigen Typ von A
wenn er es im Inneren sieht class A
und da A
unvollständig ist, ist es kann nicht seine Größe zu bestimmen, ist es kann nicht bestimmen, wie viel Platz die Mitgliedsvariable a
nehmen wird, daher wird es nicht kompiliert.
Da aber die Größe eines Zeigers dem Compiler bekannt ist, spielt es keine Rolle, um welche Art von Zeiger es sich handelt. Sie können einen Zeiger in Ihrer Klasse wie folgt definieren:
class A
{
A *pA; //okay since sizeof(pA) == sizeof(void*) == well-known to the compiler!
};
Online-Demo : http://www.ideone.com/oS5Ir
In C++ : Sie können dies nicht tun, da es sich um eine rekursive Struktur handelt (kein Ende für die Berechnung der Objektgröße), um dieses Problem zu überwinden,
Verwenden Sie selbstreferenzielle Zeiger, d.h. Zeiger mit der Adresse des gleichen Klassentyps.
class A
{
A* aObj; // Self Referential Pointer
}
- See previous answers
- Weitere Antworten anzeigen