[英]Getting “field has incomplete type” even after adding forward reference
我仍在学习c ++,并尝试弄清楚如何让两个c ++类存储彼此的实例变量。 我意识到您必须添加前向参考才能做到这一点,但是我认为我仍然必须在这里遗漏一些东西。
class B;
class A {
public:
B b;
};
class B {
public:
A a;
};
尝试编译此错误:
temp.cpp:5:5: error: field 'b' has incomplete type
B b;
^
将类型用作成员时,该类型必须完整。 在您的情况下,您想在彼此内部使用B,A,这是不可能的。
但是您可以使用指针来解决问题:
class B;
class A {
public:
B* b; // now b is a pointer which points to B type, incomplete type B is OK
};
§3.9.5类型
已声明但未定义的类,或者大小未知或元素类型不完整的数组是未完全定义的对象类型。43未完全定义的对象类型和void类型是不完全的类型(3.9.1)。 对象不应定义为不完整的类型。
你不可以做这个。 这是无限递归:A的实例必须包含B的实例(而不是指针!),B的实例必须包含A的实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.