首页 > 后端开发 > C++ > 正文

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

Susan Sarandon
发布: 2024-11-03 15:30:30
原创
378 人浏览过

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(虚拟方法表):编译器使用的数据结构存储指向类的虚拟方法的指针。它允许派生类的对象调用虚拟方法的正确实现。
  • typeinfo(运行时类型信息):存储在对象内存中的信息,用于标识对象的类型。它支持动态类型检查和多态行为。

解决错误

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

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

解决方案

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

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!