幾乎是最后一步,但仍然有些奇怪。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 關注
- 1071 瀏覽
添加回答
舉報
0/150
提交
取消