Этот вопрос задавался много раз, но обычно его можно было легко решить, изменив порядок классов. В моем случае это может быть не так.C++ - неполное объявление типа/вперед
class GCRefLink;
class GCRef;
class GCRefLink {
friend class GCRef;
private:
GCRef * ref;
GCRefLink(GCRef * ref) : ref(ref) {}
public:
~GCRefLink(){this->ref->unlink();}
};
class GCRef {
friend class GCRefLink;
private:
int refCount;
GCRef() : refCount(0) {}
virtual ~GCRef(){}
void unlink(){--this->refCount;if(this->refCount==0) delete this;}
public:
GCRefLink link(){++this->refCount;return GCRefLink(this);}
};
Когда я меняю порядок занятий, я получаю такую же ошибку почти во втором классе. Он должен быть ссылочным классом для наследования управляемыми, неуязвимыми классами, я знаю, что в STL уже есть что-то подобное, но поскольку это университетский проект, мне нужно реализовать свое.
Я получаю invalid use of incomplete type 'class GCRef'
или invalid use of incomplete type 'class GCRefLink'
ошибки
Так что прекратите определение этих функций лексически встроенным. Вопреки вашим утверждениям, это было решено много раз. –
[Правило трех] (http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three). – Casey
Вы не должны изобретать std :: shared_ptr (если вы действительно хотите это сделать, возьмите некоторые источники и настройте их на свои нужды) –