C++ 字段不是具有转发声明的完整类型。第二十二条?

C++ 字段不是具有转发声明的完整类型。第二十二条?,c++,C++,我需要使用a.h中定义的结构作为方法的参数以及B.h中另一个结构的数据元素(我不能在StructB中使用指向StructA的指针,因为它将指向的数据最终会更改,我需要在StructB中的本地副本中保留原始数据) A.h: B.h 通过将A.h包含在B.h中,StructA的声明在B.h中不可用吗?但是,编译器抱怨“字段结构的类型不完整” 如果我不转发声明StructA,编译器就会抱怨StructA没有在方法foo中声明。因此,很明显,B.h.中没有该声明 我在这里遗漏了一些基本的东西,但我想不出

我需要使用a.h中定义的结构作为方法的参数以及B.h中另一个结构的数据元素(我不能在StructB中使用指向StructA的指针,因为它将指向的数据最终会更改,我需要在StructB中的本地副本中保留原始数据)

A.h:

B.h

通过将A.h包含在B.h中,StructA的声明在B.h中不可用吗?但是,编译器抱怨“字段结构的类型不完整”

如果我不转发声明StructA,编译器就会抱怨StructA没有在方法foo中声明。因此,很明显,B.h.中没有该声明


我在这里遗漏了一些基本的东西,但我想不出来,这让我发疯!请帮忙

include“A.h”确实为
B.h
提供了完整的类型,但是我猜你有一个循环include,这就是它不起作用的原因。
A.h
是否包括
B.h
(直接或不直接)?

您可以再发布一些代码和实际的错误消息吗?是的,显然(间接)是这样。因此,解决方案是提取StructA的声明并将其放在它自己的头文件中?它本身并不在A.h中,并且依赖项被多个包含项混淆了。底线是它是一个循环依赖。虽然我在这里看到了其他地方提到的类似问题,但我没有立即看到它是如何导致问题的。老实说,这对我来说还不是非常清楚,所以我必须回顾并确保我理解这一点,并采取一些最佳做法,以避免将来发生这种事情。@BrianSpisak阅读此文-
struct StructA {
...
}
#include "A.h" 
struct StructA;

class B {
  method foo (StructA &structA);
  struct StructB {
     ...
     StructA structA
  }