Re[30]: Ошибка, если конструктор определен в h-файле (этюд?)
От: rg45 СССР  
Дата: 06.07.23 14:57
Оценка: 4 (1) +1
Здравствуйте, Shmj, Вы писали:

S>Можно и сейчас сделать. Может потом займусь, если никто не догадается как такое можно сделать.


Да пожалуйста (как же ты надоел):

http://coliru.stacked-crooked.com/a/3ff6997251bdabcc

#include <memory>

class Class1
{
public:

   // Class1() {}
   explicit Class1(int);
   ~Class1();

private:

   class Impl;

   std::unique_ptr<Impl> m;
};

int main()
{
}


Раскомментируешь дефолтный конструктор, определенный инлайном в классе, и — получите, распишитесь:

http://coliru.stacked-crooked.com/a/1840c0de42ea99a3

g++ -std=c++11 -O2 -Wall -pedantic -pthread main.cpp && ./a.out
/usr/local/include/c++/12.1.0/bits/unique_ptr.h:93:23: error: invalid application of 'sizeof' to incomplete type 'Class1::Impl'
   93 |         static_assert(sizeof(_Tp)>0,
      |                       ^~~~~~~~~~~


Выносим определение дефолтного конструктора в cpp, и снова все чики-пуки:

http://coliru.stacked-crooked.com/a/a866ea1051987c33
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 06.07.2023 15:13 rg45 . Предыдущая версия . Еще …
Отредактировано 06.07.2023 15:04 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.