几乎是最后一步,但仍然有些奇怪。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)可能与其中的一个在同一目标文件中生成;如果未实现这些功能,则内部结构将丢失,并且您会得到这些错误。
智慧大石
TA贡献1946条经验 获得超3个赞
障碍类需要一个虚拟的析构函数。将析构函数定义更改为:
virtual ~Obstacle();
析构函数的定义还会为具有虚函数的类创建vtable。它还确保通过基类指针删除派生类实例的操作正确。
- 3 回答
- 0 关注
- 1035 浏览
添加回答
举报
0/150
提交
取消