Здравствуйте, rg45, Вы писали:
R>Ну и сколько еще подробностей придется из тебя вытащить, чтоб получить наконец полную картину?
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 идиомы, но я этого не проверял.