如何解决字段'classname'具有不完整的类型错误

时间:2013-10-08 16:54:45

标签: c++ class field

执行以下操作时出现此错误:

A级; B级;

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

B级{
...
a_object;
...
}

我观察到的一件事是,如果我向上移动B级然后它会被移除但是因为我使用双向链接,这也是B中的A类对象因此我无法摆脱这两个错误。

2 个答案:

答案 0 :(得分:1)

它被称为循环依赖问题。有关如何解决此问题的详细信息,请参阅此answer

答案 1 :(得分:0)

循环依赖

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,反之亦然)。

因此问题是:自己的B或B是否拥有A - 或者甚至是另一个C类都拥有A。

(拥有已定义的所有权,您可能只使用new / delete而不是shared_ptr)