2016-06-06 10 views
-1

Ich machte eine Klasse in C++ und es hatte ein Mitglied der gleichen Klasse und es gab einen unvollständigen Klassenfehler.C++ unvollständige Typklasse

class A{ 
    private: 
     A member; 
}; 

Ich fand diese "Incomplete type" in class which has a member of the same type of the class itself , Incomplete Type diese eine sehr gute Erklärung gab, warum der Fehler passiert ist und wie es zu beheben.

aber für die Praxis habe ich den gleichen Code auf Python 2.7 und es war in der Lage, eine Klasse mit einem Mitglied der gleichen Klasse zu machen.

meine Frage ist, wie (was ist die Erklärung) Python ist in der Lage, das zu tun, und mögliche Differenz zwischen C++ und Python auf dieses besondere Problem der Handhabung

Python-Code:

class node: 
    def __init__(self,t): 
     self.key=t 
     self.lc=None 
     self.rc=None 

parent=node(10) 
lc=node(5) 
rc=node(15) 
parent.lc=lc 
parent.rc=rc 
+0

Sie können eine Klasseninstanz in C++ nicht als Mitglied in sich selbst einfügen. Das würde zu unendlicher Rekursion führen. Außerdem fehlt nach der Klassendeklaration ein Semikolon. –

+0

ja ich habe diese Erklärung für das C++ bekommen, ich wollte wissen wie und warum Python das kann – Nikhil

+0

Nun, es ist ein bisschen unklar, ob Sie nach C++ oder Python fragen. –

Antwort

1

Python hat Duck Typing und erstellt das Elementobjekt vor dem Aufruf seines Konstruktors nicht tatsächlich.

In Python kann Ihre Variable sogar eine Zeichenfolge und später ein Klassenobjekt enthalten. Ich sehe nicht, wie du den gleichen Code haben würdest. Sie geben nicht den Typ Ihrer Variablen an, und sie können enthalten, was Sie wollen, nur Fehler bei falscher Manipulation erhöhen.

In C++ wird das Mitglied A zur gleichen Zeit wie die Klasse erstellt, was zu einer unendlichen Rekursion führt.

Use a pointer Wenn Sie wählen möchten, wann das Mitglied zugewiesen werden soll.

+0

mit dem gleichen Code ich meinte das gleiche wie in der Verwendung des Klassenobjekts als Mitglied der Klasse. – Nikhil

1

Sind Sie sicher?

>>> class A: 
...  aa = A() 
... 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 2, in A 
NameError: name 'A' is not defined 

Ich bekomme das in Python 2.7 und 3.5.