问题:
error: incomplete type ‘ ’ used in nested name specifier
error: invalid use of incomplete type ‘class A’
出现类似以上的问题,原因是类的交叉引用引起的,如A类和B类都使用了防止重复包含的宏定义,A类中包含了B类,B类中又包含了A类,结果造成重复包含了。
解决方案:
解决类的交叉引用的方案是使用类的前置声明+指针引用,指针引用作为类成员,会告诉编译器我这里指向了一个B类的对象,而不必关注该类的大小,也不必开辟对应内存,因此只需要在A类前面声明该类,告诉编译器这个类存在即可。
如:
在A.h 文件中,不仅需要包含B类#include"B.h",同时要在class A 前面加一行 class B; B类也需要同样的操作。另外,如果A类中有声明自己的指针:using pointer = std::shared_ptr<A>,在B类是不能使用A::pointer类定义A的指针的,需要重新使用std::shared_ptr<A>来定义。
本文探讨了C++编程中常见的类交叉引用错误,如'incomplete type'和'invalid use of incomplete type',并提供了详细的解决方案,包括使用类的前置声明和指针引用的方法,避免重复包含导致的问题。

1万+

被折叠的 条评论
为什么被折叠?



