【发布时间】:2015-03-30 19:27:19
【问题描述】:
这个问题已经被问过很多次了,但通常可以通过改变课程的顺序来轻松解决。就我而言,可能不是。
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' 错误
【问题讨论】:
-
所以停止在词法上内联定义这些函数。与您的说法相反,这个问题已经解决了很多次。
-
您不应该重新发明 std::shared_ptr (如果您真的想这样做,请获取一些资源并根据您的需要进行调整)
标签: c++ class c++11 declaration forward-declaration