谁能告诉我 C++ 编译器何时抛出“不完整类型错误”?
注意:我故意让这个问题有点开放式,以便我可以自己调试我的代码。
当编译器看到前向声明但没有该类型的完整定义,而该类型正在某处使用时,通常会发生这种情况。例如:
class A;
class B { A a; };
第二行将导致编译器错误,并且根据编译器的不同,将报告不完整的类型(其他编译器会给出不同的错误,但含义相同)。
然而,当您仅使用指向此类前向声明的指针时,不会出现任何抱怨,因为指向类的指针的大小始终是已知的。像这样:
class A;
class B {
A *a;
std::shared_ptr<A> aPtr;
};
如果您询问出现此错误时具体应用程序或库中可能出了什么问题:通常当包含包含前向声明的标头但尚未找到完整定义时会发生这种情况。解决方案非常明显:还包括允许您访问完整类型的标头。有时,您也可能只是没有用于类型的命名空间或使用了错误的命名空间,而需要更正它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)