问题:
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>来定义。