”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 为什么我的 C++ 代码中出现“vtable”和“typeinfo”未定义符号错误?

为什么我的 C++ 代码中出现“vtable”和“typeinfo”未定义符号错误?

发布于2024-11-09
浏览:678

Why Am I Getting \

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

在提供的代码中,出现链接错误并显示以下消息:

Undefined symbols:
  "vtable for Obstacle", referenced from:
      Obstacle::Obstacle()in Myworld.o
  "typeinfo for Obstacle", referenced from:
      typeinfo for RECTANGLEin RECTANGLE.o
      typeinfo for CIRCLEin CIRCLE.o

理解“vtable”和“typeinfo”

  • vtable(虚拟方法表): A data编译器用来存储指向类的虚拟方法的指针的结构。它允许派生类的对象调用虚方法的正确实现。
  • typeinfo(运行时类型信息):存储在对象内存中的信息,用于标识对象的类型。它支持动态类型检查和多态行为。

解决错误

此错误的根本原因很可能是抽象基类 Obstacle 包含非- 纯虚函数。当一个类声明了纯虚函数(virtual void Method() = 0;)时,就表示派生类必须重写其实现。

如果在 Obstacle 中定义了非纯虚函数,编译器将期望在基类或派生类中找到它们的实现。但是,如果未提供这些实现,编译器将生成依赖于这些函数的内部结构(vtable 和 typeinfo)。链接时,缺少的函数会导致未定义符号错误。

解决方案

要解决此问题,请确保声明抽象基类 Obstacle 中的所有虚拟方法作为纯虚函数。这迫使派生类重写并实现这些方法。通过这样做,将提供正确的虚拟方法实现,并且链接过程应该成功,并且不会出现未定义的符号错误。

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3