Информация об изменениях

Сообщение Re[30]: Ошибка, если конструктор определен в h-файле (этюд?) от 06.07.2023 14:57

Изменено 06.07.2023 15:04 rg45

Re[30]: Ошибка, если конструктор определен в h-файле (этюд?)
Здравствуйте, 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
Re[30]: Ошибка, если конструктор определен в h-файле (этюд?)
Здравствуйте, 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