Re[4]: Ошибка, если конструктор определен в h-файле (этюд?)
От: Shmj Ниоткуда  
Дата: 05.07.23 13:55
Оценка:
Здравствуйте, 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 — то должно было бы увидеть и определение класса. Но не увидело — выдает ошибку.
=сначала спроси у GPT=
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.