执行以下操作时出现此错误:
A级; B级;
A级{
B b_obj; //这里出现错误
...
}
B级{
...
a_object;
...
}
我观察到的一件事是,如果我向上移动B级然后它会被移除但是因为我使用双向链接,这也是B中的A类对象因此我无法摆脱这两个错误。
答案 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)