c++ - 不完整的类型/前向声明
c++ - incomplete type / forward declaration
这个问题已被问过很多次,但通常可以通过更改 classes 的顺序轻松解决。在我的情况下可能不是。
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);}
};
当我更改 classes 的顺序时,我在大约第二个 class 时遇到了同样的错误。它的意思是参考 class 由托管的、不可删除的 classes 继承,我知道 stl 中已经有这样的东西但是因为它是大学项目我需要实现我自己的。
我收到 invalid use of incomplete type 'class GCRef'
或 invalid use of incomplete type 'class GCRefLink'
错误
将 ~GCRefLink
析构函数实现放在第二个 class 之后(最好放在单独的 .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(); }
这个问题已被问过很多次,但通常可以通过更改 classes 的顺序轻松解决。在我的情况下可能不是。
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);}
};
当我更改 classes 的顺序时,我在大约第二个 class 时遇到了同样的错误。它的意思是参考 class 由托管的、不可删除的 classes 继承,我知道 stl 中已经有这样的东西但是因为它是大学项目我需要实现我自己的。
我收到 invalid use of incomplete type 'class GCRef'
或 invalid use of incomplete type 'class GCRefLink'
错误
将 ~GCRefLink
析构函数实现放在第二个 class 之后(最好放在单独的 .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(); }