不完整的类型/正向声明
incomplete type / forward declaration
这个问题已经被问了很多次,但通常可以通过更改类的顺序来轻松解决。就我而言,可能不是。
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'
错误
将~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(); }
相关文章:
- std::enable_if 更改成员 *变量* 声明/类型
- 对前向声明类型进行unique_ptr的解决方法
- 如何将声明类型作为参数发送
- 在 Fortran 中泛化特定声明类型的操作
- 使用 (c++11) 声明类型时放置 __declspec(dllimport) 关键字的位置
- 模板函数可以使用带有删除的构造函数的声明类型
- 声明类型没有任何可变类型
- 如何使用声明类型简化此代码
- 使用声明类型选择函数专业化
- 替代班级内声明类型的别名
- 对于自动键入推论的参数,声明类型(自动)应推导的内容
- 使用 decltype 的条件声明类型
- 您如何声明类型结构的堆栈?在C 中
- 将指向前向声明类型的指针推送到 typedef'd 向量时出现编译器错误
- 声明适用于 auto,但不能显式声明类型?
- 声明类型包含未展开的参数包'Args'
- 课堂上的Typedef.在另一个类错误中:尚未声明类型
- 冲突的声明类型/价值不匹配
- 获取具有AST访问者clang的功能声明类型
- 变量声明类型定义 C 中的约定