如何解决字段'classname'类型错误不完整
How to solve field 'classname' has incomplete type error
我在实现以下内容时收到此错误:
A类;B类;
A 类 {
B b_obj ;错误
来了...
}
B 类 {
...
一个a_object;
...
}
我观察到的一件事是,如果我向上移动 B 类,那么它就会被删除,但由于我使用的是双向链接,它在 B 中也有 A 类的对象,因此我无法摆脱这两个错误。
这被称为循环依赖问题。请参阅这个伟大的答案,详细了解如何解决它。
循环依赖
struct A { B b; };
struct B { A a; };
永远不会编译。A 不知道 B 的大小,反之亦然(一个在另一个之前声明)。
现在你可能会想写(用前向声明)
struct A { std::shared_ptr<B> b; };
struct B { std::shared_ptr<A> a; };
这将编译并(可能/会)引入内存泄漏(A 指 B,反之亦然)。
因此,问题是:A 拥有 B 还是 B 拥有 A——甚至另一个 C 类同时拥有两者。
(有了定义的所有权,您可能只使用 new/delete 而不是 shared_ptr)
相关文章:
- 我的模板类方法返回错误类型?
- 错误:类型"double()"和"double()"的操作数无效到二进制&quo
- 类型为 "int*" 的参数与 C++ 中错误类型"int**"参数不兼容
- glDrawElements GL 错误类型 = 0x824c,严重性 = 0x9146,消息 = GL_INVALID
- Eclipse/CDT_C++给出"语义错误_"类型XXX无法解决"。项目运行
- turbo 为什么我的C++代码中出现错误类型名称预期"错误?
- "auto"推断出 hashtable_policy.h 中的错误类型
- 设计自己的结果/两者之一:是否应该始终指定成功类型和错误类型
- 如何修复"ctypes"。参数错误:参数 2:<键入"异常.类型错误">:RaspberryPi 中的错误类型"错误
- 在 vscode 上编译错误.类型说明符是 C++11 扩展
- 不允许使用错误类型
- 当读取错误类型时,CIN覆盖我的初始化值
- C++:"错误:类型'const char*'和'const char [28]'的操作数无效到二进制'ope
- 我的代码错误类型警告 1 警告 C4018 和更多错误
- 在shared_from_this()中的错误类型(在继承类中)(是否有dyn.type-ware shared Poi
- 为什么缩小转换范围不能防止错误类型的map.insert()失败
- 程序总是返回二进制'>>':找不到运算符,它采用错误类型的左操作数
- 错误:类型为 '.&' 来自类型的临时 '..*康斯特'
- 涉及将要馈送的向量转换为execvp的错误类型
- C++中是否存在错误类型