Здравствуйте, Videoman, Вы писали:
V>Ему естественно не всё равно. Пустой конструктор в месте своего объявления также создает пустые конструкторы вех членов класса. Может быть ситуация, когда в .h есть только декларация члена класса, но нет определения, а в .cpp определение уже есть полностью. Обычно таким свойством обладают шаблонные классы параметризуемые типами не требующими определения до момента конструирования. Например конструктор std::unique_ptr<> по умолчанию может потребовать delete-r (и соответственно определение класса, его деструктор в частности) в месте определения конструктора родителя.
Гипотеза разумная. Но почему-то не работает:
Class1.h:
#include <memory>
class Class2;
class Class1
{
public:
Class1();
private:
std::unique_ptr<Class2> obj;
};
Class1.cpp
#include "Class1.h"
class Class2
{
};
Class1::Class1()
{
}
— по вашей гипотезе должно собираться, верно? Ведь раз взяло конструктор из файла Class1.cpp — то должно было бы увидеть и определение класса. Но не увидело — выдает ошибку.