Неправильное использование предварительной декларации?

Иногда я использую предварительное объявление для вложенных классов:

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?

Форвардные декларации не о перезаписи. Это просто подсказка компилятору, что определение типа где-то реализовано. Для пользовательских типов указателей компилятор не требует определения, но должен знать, каков тип объекта.

Другие вопросы по тегам