Здравствуйте, B0FEE664, Вы писали:
BFE>rg45, зачем полная картина? И так же всё ясно: раз речь про конструктор, значит не удаётся создать поля класса. Значит в Class1 есть указатель (или иное использование) на Class2. А в Class2 есть указатель или иное использование Class1 — это не обязательно, но весьма вероятно. Поэтому перед/в Class1 есть фраза class Class2; — чтобы разорвать циклическую зависимость. Это означает что в Class1 Class2 не полный и когда конструктор пытаются определить прямо в Class1, то компилятор ругается, что не может создать то, что не описано. Более того, зная что Shmj новичок в С++, то можно утверждать с большой долей вероятности, что он не знает про циклические зависимости классов и способов их разрешения. Не знает про случаи, когда inline методы определяются вне класса и обычно в отдельном файле (а в некоторых случаях ещё и со своим расширением типа *.inc или *.inl (Ещё вариант — это добавление include после определение класса, но такое — экзотика)). Короче, ничего необычного, кроме сообщения об ошибке. Вот она меня удивила, так как не знал про static_assert(sizeof(_Tp)>0, в unique_ptr. Думал про массив нулевого размера. Видать этот static_assert нужен для предотвращения проблемы некорректного вызова деструктора для pimpl идиомы, но я этого не проверял.
Объяснение выглядит очень убедительным. Но я, признаться, даже не пытался вникать в суть "задачи", принимая во внимание персону и стиль задания вопросов.
--
Справедливость выше закона. А человечность выше справедливости.