2017-01-29 3 views
-2

Предположим, у меня есть заголовок, который содержит эти два классакомпилятор не может скомпилировать наследования C++

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

когда компилятор компилирует инклюдник, когда дело доходит до класса А, он видит класс А наследует от B, но это Безразлично 't достичь определения класса B. Таким образом, это дает ошибку. и если я меняю порядок обоих классов, он дает ошибку из-за объекта__объекта, поскольку он не видит определение класса А.

Как решить эту проблему? и предположим, что я ограничился этим включением файла, чтобы иметь определения класса А и В.

Благодаря

+0

Вы не можете делать подобные рекурсивные зависимости. –

+0

Подумайте об этом. Размер 'A' будет содержать размер' a_object', который он наследует от 'B', поэтому' sizeof (A) 'бесконечно. Очевидно, что это не сработает. – chris

ответ

1

Вот упрощенная версия вашей проблемы:

class X { 
    X x; 
}; 

Класс не может внедрить объект своего собственного типа.

В частности, ваш класс B вводит объект типа A, который по наследству также имеет тип B.

1

Если вам действительно нужна иерархия, вы можете сделать что-то вроде следующего.

class A; 

class B 
{ 
protected: 
    A* a_object; 
}; 

class A: public B { 
    // code 
}; 
Смежные вопросы