未定義的符號:「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 中的所有虛擬方法作為純虛函數。這迫使衍生類別重寫並實作這些方法。透過這樣做,將提供正確的虛擬方法實現,並且連結過程應該成功,並且不會出現未定義的符號錯誤。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3