繁体   English   中英

如何解决字段“类名”具有不完整的类型错误

[英]How to solve field 'classname' has incomplete type error

我在执行以下操作时遇到此错误:

A级 B级

A类{
B b_obj; //这里出现错误
...
}

B级{
...
一个对象
...
}

我观察到的一件事是,如果我向上移动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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM