单个C++文件中相互依赖的类如何正确使用forward declaration解决编译报错
错误原因
- 前向声明仅能向编译器提供「类存在」的标识,无法提供类的内存布局、成员定义等完整信息
- 你在
cls1的构造函数中按值传递cls2参数、访问cls2的成员变量vi,这两个操作都要求编译器已经掌握cls2的完整定义,因此会触发不完整类型报错
单文件实现方案
把两个类中依赖对方完整定义的构造函数,移动到两个类都完成声明之后再实现即可,不需要拆分多文件,可正常编译的示例代码如下:
class cls2; class cls1 { public: int vi; // 仅声明构造函数,不实现,此时不需要cls2的完整定义 cls1(int v = 30); cls1(cls2 p); }; class cls2 { public: int vi; // 仅声明构造函数,不实现 cls2(int v = 20); cls2(cls1 p); }; // 两个类都已完成完整定义,此时实现构造函数无类型不完整问题 cls1::cls1(int v) : vi(v) {} cls1::cls1(cls2 p) : vi(p.vi) {} cls2::cls2(int v) : vi(v) {} cls2::cls2(cls1 p) : vi(p.vi) {}
内容的提问来源于stack exchange,提问作者meabefir
相关产品推荐
相关产品推荐

