"non-virtual thunk to <method name>",引用自:Vtable for <classname>in <objectfile.o>

新手上路,请多包涵

在调试模式下编译时,我的 xcode 编译有以下链接错误:

 "<method name>", referenced from:
Vtable for <classname>in <objectfile.o>

"non-virtual thunk to <method name>", referenced from:
Vtable for <classname>in <objectfile.o>

奇怪的是:它只出现在我的一个构建目标中(对于该代码,两个目标几乎相同),而且如果这些方法是在头文件而不是 .cpp 中定义的,那么它对两个目标都可以正常工作。

所有这些方法都是纯虚拟的。发生这些错误的类继承自多个类,但只有其中一个类会导致这些错误。

任何人都知道是什么导致了这个错误?

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

阅读 1.3k
1 个回答

遇到了同样的问题。当我们定义了一个虚拟成员函数(在 .h 头文件中)但没有实现它(在 .cpp 文件中)时,就会发生这种情况。

在我的例子中,实现是在一个阻止被实际编译的#define 中。对于这种常见错误,GCC 应该有更明确的信息,例如

virtual function <function> defined but not implemented in class <class>

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

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