这个问题已被多次询问,但通常可以通过改变课程的顺序来轻松解决。在我的情况下,它可能不是。
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'
错误
答案 0 :(得分:3)
在第二个类之后放置~GCRefLink
析构函数实现是否错误(理想情况下是在单独的.cpp文件中)?
class GCRef;
class GCRefLink {
friend class GCRef;
private:
GCRef * ref;
GCRefLink(GCRef * ref) : ref(ref) {}
public:
~GCRefLink();
};
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); }
};
GCRefLink::~GCRefLink(){ this->ref->unlink(); }