繁体   English   中英

即使添加了前向引用,也会获取“字段的类型不完整”

[英]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.

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