未定義的符號:「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中文網其他相關文章!