2017-01-29 2 views
-2

Angenommen, ich habe einen Header, die diese beiden Klassen enthaltenCompiler kann keine Vererbung C++ kompilieren

class A:public class B{ 
// code 
}; 
class B 
{ 
protected: 
A a_object; 
}; 

, wenn der Compiler diese Datei enthalten kompiliert, wenn es um die Klasse A kommt, ist es Klasse A von B erbt sieht aber es doesn erreichen Sie nicht die Klasse B. Definition gibt einen Fehler. und wenn ich die Reihenfolge beider Klassen umkehre, gibt es einen Fehler aufgrund von a_object, da es die Definition der Klasse A nicht sieht.

So, wie um dieses Problem zu lösen? und nehme an, dass ich auf diese Include-Datei beschränkt bin, um Definitionen der Klasse A und B zu haben. Hier

Dank

+0

Sie können diese Art von rekursiven Abhängigkeiten nicht ausführen. –

+0

Denken Sie darüber nach. Die Größe eines 'A' wird die Größe des' a_object' beinhalten, das er von 'B' erbt, also ist' sizeof (A) 'unendlich. Offensichtlich wird das nicht funktionieren. – chris

Antwort

1

ist eine vereinfachte Version des Problems:

class X { 
    X x; 
}; 

Eine Klasse ein Objekt nicht von seiner eigenen Art einbetten kann.

Insbesondere enthält Ihre Klasse B ein Objekt vom Typ A, das durch Vererbung auch vom Typ B ist.

1

Wenn Sie wirklich eine Hierarchie wie diese haben, können Sie etwas wie folgt tun.

class A; 

class B 
{ 
protected: 
    A* a_object; 
}; 

class A: public B { 
    // code 
}; 
Verwandte Themen