C语言中什么时候出现不完整类型错误

新手上路,请多包涵

谁能告诉我 C++ 编译器何时抛出“不完整类型错误”?

注意:我故意让这个问题有点开放式,以便我可以自己调试我的代码。

原文由 Nickal 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 588
1 个回答

这通常发生在编译器看到前向声明但没有该类型的完整定义时,而该类型正在某处使用。例如:

 class A;

class B { A a; };

第二行将导致编译器错误,并且根据编译器的不同,将报告不完整的类型(其他编译器会给您不同的错误,但含义相同)。

但是,当您只使用指向此类前向声明的指针时,不会出现任何抱怨,因为指向类的指针的大小始终是已知的。像这样:

 class A;
class B {
   A *a;
   std::shared_ptr<A> aPtr;
};

如果您在出现此错误时询问具体应用程序或库中可能出现的问题:这通常发生在包含包含前向声明但尚未找到完整定义的标头时。解决方案非常明显:还包括允许您访问完整类型的标题。有时您也可能只是没有用于类型的名称空间或使用了错误的名称空间,而是需要更正它。

原文由 Mike Lischke 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题