Здравствуйте, so5team, Вы писали:
S>Потому что Shmj говорил, что изначально у Class1 вообще явно определенного конструктора не было, был только дефолтный, сгенерированный самим компилятором.
Для рассматриваемого случая принципиальной разницы нет — что дефолтный конструктор, определенный компилятором, что дефолтный конструктор, определенный пользователем в теле класса, — оба варианта приводят к одной и той же ошибке.
--
Справедливость выше закона. А человечность выше справедливости.
Re[20]: Ошибка, если конструктор определен в h-файле (этюд?)
Здравствуйте, rg45, Вы писали:
S>>Потому что Shmj говорил, что изначально у Class1 вообще явно определенного конструктора не было, был только дефолтный, сгенерированный самим компилятором.
R>Для рассматриваемого случая принципиальной разницы нет — что дефолтный конструктор, определенный компилятором, что дефолтный конструктор, определенный пользователем в теле класса, — оба варианта приводят к одной и той же ошибке.
Это да. Просто хотелось понять, как Shmj умудрялся работать с экземплярами Class1, если в Class1 не было явно описанного пользователем конструктора.
Re[21]: Ошибка, если конструктор определен в h-файле (этюд?)
Здравствуйте, so5team, Вы писали:
S>Это да. Просто хотелось понять, как Shmj умудрялся работать с экземплярами Class1, если в Class1 не было явно описанного пользователем конструктора.
Ну так, возможно, до него все работало и с автоматически сгенерированным конструктором. Не зря же он подключился к проекту
--
Справедливость выше закона. А человечность выше справедливости.
Re[27]: Ошибка, если конструктор определен в h-файле (этюд?)
Здравствуйте, rg45, Вы писали:
S>>Это да. Просто хотелось понять, как Shmj умудрялся работать с экземплярами Class1, если в Class1 не было явно описанного пользователем конструктора.
R>Ну так, возможно, до него все работало и с автоматически сгенерированным конструктором.
"Но черт возьми, Холмс, как?"
Мне вот было любопытно, как в Class1 создается и инициализируется что-то связанное с Class2, при этом не имея определения Class2.
Но, похоже, там просто unique_ptr, который изначально пустой, а значение ему назначается позже. Что-то вроде:
Здравствуйте, rg45, Вы писали:
R>Для рассматриваемого случая принципиальной разницы нет — что дефолтный конструктор, определенный компилятором, что дефолтный конструктор, определенный пользователем в теле класса, — оба варианта приводят к одной и той же ошибке.
Мне не нужно знать в чем проблема была именно в том частном случае.
Мне нужно понимание почему вообще перенос пустого конструктора в H-файл может приводить к ошибке компиляции — какая разница компилятору?
Когда тебе ответили на поставленный вопрос: "почему вообще так может быть?", оказалось, что "у тебя был другой кейс". Так ты сам определись сначала, что ты хочешь — чтоб твои "этюды" решали, или чтоб тебе разрулили то, что ты там наговнокодил за кулисами, и не морочь людям головы.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, rg45, Вы писали:
R>Когда тебе ответили на поставленный вопрос: "почему вообще так может быть?", оказалось, что "у тебя был другой кейс". Так ты сам определись сначала, что ты хочешь — чтоб твои "этюды" решали, или чтоб тебе разрулили то, что ты там наговнокодил за кулисами, и не морочь людям головы.
В принципе да, на первоначальный вопрос ответили. Но тут же начало распирать любопытство — а как же у меня могло работать с конструктором по умолчанию? Ну не создавать же новую тему?
=сначала спроси у GPT=
Re[28]: Ошибка, если конструктор определен в h-файле (этюд?)
Здравствуйте, Shmj, Вы писали:
S>В принципе да, на первоначальный вопрос ответили. Но тут же начало распирать любопытство — а как же у меня могло работать с конструктором по умолчанию? Ну не создавать же новую тему?
S>Но тут же начало распирать любопытство — а как же у меня могло работать с конструктором по умолчанию?
Вообще, странный вопрос — в каком смысле "могло"? Сейчас у же перестало, что ли? Так может помимо этого были сделаны еще какие-то изменения, не рассматривал такой вариант?
--
Справедливость выше закона. А человечность выше справедливости.
Re[29]: Ошибка, если конструктор определен в h-файле (этюд?)
Здравствуйте, rg45, Вы писали:
S>>Но тут же начало распирать любопытство — а как же у меня могло работать с конструктором по умолчанию?
R>Вообще, странный вопрос — в каком смысле "могло"? Сейчас у же перестало, что ли? Так может помимо этого были сделаны еще какие-то изменения, не рассматривал такой вариант?
Можно и сейчас сделать. Может потом займусь, если никто не догадается как такое можно сделать.
=сначала спроси у GPT=
Re[28]: Ошибка, если конструктор определен в h-файле (этюд?)
S>Но тут же начало распирать любопытство — а как же у меня могло работать с конструктором по умолчанию?
И научись уже использовать правильную терминологию, чтоб не приходилось тебя разгадывать как ребус. Конструкторы по умолчанию бывают определенные пользователем и могут быть определены неявно компилятором. Так какой из них ты имел в виду? (Можешь не отвечать, вопрос риторический).
--
Справедливость выше закона. А человечность выше справедливости.
Re[30]: Ошибка, если конструктор определен в h-файле (этюд?)
. Можете закоментировать конструктор/деструктор в demo.hpp/cpp и все будет компилироваться. А если определите конструктор по умолчанию прямо в demo.hpp, то перестанет.
. Можете закоментировать конструктор/деструктор в demo.hpp/cpp и все будет компилироваться. А если определите конструктор по умолчанию прямо в demo.hpp, то перестанет.
In file included from /Users/test/Desktop/cmake_test/main.cpp:1:
/Users/test/Desktop/cmake_test/Class1.h:11:11: error: variable has incomplete type 'Class2'
C v;
^
/Users/test/Desktop/cmake_test/Class1.h:15:13: note: in instantiation of function template specialization 'Class1::get_v<Class2>' requested here
int v_{ get_v<Class2>() };
^
/Users/test/Desktop/cmake_test/Class1.h:6:7: note: forward declaration of 'Class2'
class Class2;
^
1 error generated.
Вот странно, у меня такая ошибка с вашим оригинальным кодом, ничего не переносил в H-файл.
=сначала спроси у GPT=
Re[32]: Ошибка, если конструктор определен в h-файле (этюд?)
Здравствуйте, Shmj, Вы писали:
S>Вот странно, у меня такая ошибка с вашим оригинальным кодом, ничего не переносил в H-файл.
Вот этот вариант, вроде бы, работает вне зависимости от версии компилятора:
demo.hpp
#pragma once
#include <memory>
class Class1
{
public:
Class1();
~Class1();
static std::unique_ptr<Class1> make();
private:
class Impl;
std::unique_ptr<Impl> m;
};