未定义的符号:“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”
解决错误
此错误的根本原因很可能是抽象基类 Obstacle 包含非- 纯虚函数。当一个类声明了纯虚函数(virtual void Method() = 0;)时,就意味着派生类必须重写其实现。
如果你在 Obstacle 中定义了非纯虚函数,编译器将期望在基类或派生类中找到它们的实现。但是,如果未提供这些实现,编译器将生成依赖于这些函数的内部结构(vtable 和 typeinfo)。链接时,缺少函数会导致符号未定义的错误。
解决方案
要解决此问题,请确保抽象基类 Obstacle 中的所有虚拟方法都已声明作为纯虚函数。这迫使派生类重写并实现这些方法。通过这样做,将提供正确的虚拟方法实现,并且链接过程应该成功,并且不会出现未定义的符号错误。
以上是为什么我的 C 代码中出现'vtable”和'typeinfo”未定义符号错误?的详细内容。更多信息请关注PHP中文网其他相关文章!