Неправильное использование предварительной декларации?
Иногда я использую предварительное объявление для вложенных классов:
class A;
class B
{
private:
A* object_A;
public:
B(){}
};
Вопрос: что произойдет, если я сейчас использую предварительное объявление класса B
(B
объявлен и определен в этой точке) для использования в классе C
? Это вызывает какие-либо проблемы с классом B
потому что он определен (с реализацией методов и т. д.), но используется с предварительным объявлением для класса C
? Есть ли синтаксис class B;
в следующем фрагменте кода как-то перезаписывается предыдущий объявленный, определенный и реализованный класс B
?
class B;
class C
{
private:
B* object_B;
public:
C(){}
};
1 ответ
Имеет ли синтаксис класс B; в следующем фрагменте кода перезаписывает каким-либо образом предыдущий объявленный, определенный и реализованный класс B?
Форвардные декларации не о перезаписи. Это просто подсказка компилятору, что определение типа где-то реализовано. Для пользовательских типов указателей компилятор не требует определения, но должен знать, каков тип объекта.