首页  >  文章  >  后端开发  >  为什么我的 C 程序中出现“未定义符号:‘vtable’ 和‘typeinfo’\”错误?

为什么我的 C 程序中出现“未定义符号:‘vtable’ 和‘typeinfo’\”错误?

Linda Hamilton
Linda Hamilton原创
2024-10-31 16:02:56351浏览

Why Am I Getting

未定义的符号:“vtable”和“typeinfo”

问题:

编译时一个C程序,出现以下错误:

Undefined symbols:
  "vtable for Obstacle"
  "typeinfo for Obstacle"

这些符号是什么意思,如何解决?

答案:

在 C 中,虚方法是在基类中声明并在派生类中重写的方法。为了允许在运行时动态绑定到正确的方法,编译器会为每个包含虚拟方法的类生成虚拟方法表 (vtable) 和类型信息 (typeinfo)。

错误表明编译器无法找到 Obstacle 类的 vtable 和 typeinfo。如果出现以下情况,就会发生这种情况:

  • Obstacle 类未正确声明为抽象,或者
  • Obstacle 类包含未在派生类中实现的非纯虚方法。

要解决这些错误,请确保 Obstacle 类中的所有虚拟方法都声明为纯虚拟方法,使用以下语法:

<code class="cpp">virtual void Method() = 0;</code>

这表明必须重写该方法在派生类中,并且它在基类中可能没有自己的实现。

如果 Obstacle 类包含任何非纯虚拟方法,请确保它们在派生类中实现。否则,编译器将假设它们在某处有实现,并在不包含实际实现的对象文件中生成 vtable 和 typeinfo。

以上是为什么我的 C 程序中出现“未定义符号:‘vtable’ 和‘typeinfo’\”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn