为了账号安全,请及时绑定邮箱和手机立即绑定

未定义的符号“ vtable for…”和“ typeinfo for ...”?

未定义的符号“ vtable for…”和“ typeinfo for ...”?

C++
温温酱 2019-12-04 14:32:58
几乎是最后一步,但仍然有些奇怪。bash-3.2$ makeg++ -Wall -c -g Myworld.ccg++ -Wall -g solvePlanningProblem.o Position.o AStarNode.o PRM.o PRMNode.o World.o SingleCircleWorld.o Myworld.o RECTANGLE.o CIRCLE.o -o solvePlanningProblemUndefined 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.old: symbol(s) not foundcollect2: ld returned 1 exit statusmake: *** [solvePlanningProblem] Error 1vtable和typeinfo是什么意思?
查看完整描述

3 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

如果Obstacle是抽象的基类,请确保将其所有虚拟方法声明为“纯虚拟”:


virtual void Method() = 0;

该= 0告诉编译器,这个方法必须重写由派生类,可能不会有它自己的实现。


如果该类包含任何非纯虚函数,则编译器将假定它们在某处具有实现,并且其内部结构(vtable和typeinfo)可能与其中的一个在同一目标文件中生成;如果未实现这些功能,则内部结构将丢失,并且您会得到这些错误。


查看完整回答
反对 回复 2019-12-04
?
智慧大石

TA贡献1946条经验 获得超3个赞

障碍类需要一个虚拟的析构函数。将析构函数定义更改为:


virtual ~Obstacle();

析构函数的定义还会为具有虚函数的类创建vtable。它还确保通过基类指针删除派生类实例的操作正确。


查看完整回答
反对 回复 2019-12-04
  • 3 回答
  • 0 关注
  • 1035 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信