error: incomplete type ‘ ’ used in nested name specifier

江枫思渺然 提交于 2020-01-16 09:08:07

问题:

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!