Удаление вперед объявленного класса [дубликат]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Удаление вперед объявленного класса [дубликат]

Сообщение Anonymous »

У меня есть следующая настройка:
foo.h

Код: Выделить всё

class Foo {
public:
Foo();
private:
class Bar;

std::unique_ptr bar_;
};
foo.cc

Код: Выделить всё

class Foo::Bar {
public:
Bar() { // something smart  }
~Bar() = default;
};

Foo::Foo() {  // something smart  }
При запуске модульного теста, который создает и разрушает Foo, компилятор сообщает:

недопустимое приложение от 'sizeof' к неполному типу Foo::Bar

Оказывается, если я добавлю следующее, все будет работать нормально:
foo.h

Код: Выделить всё

class Foo {
public:
~Foo();
};
foo.cc

Код: Выделить всё

Foo::~Foo() = default;
Я хочу понять причину. Почему кажущаяся бесполезной декларация и определение деструктора позволяют всему этому работать?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ared-class
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»