」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼我的 C++ 程式碼中會出現「vtable」和「typeinfo」未定義符號錯誤?

為什麼我的 C++ 程式碼中會出現「vtable」和「typeinfo」未定義符號錯誤?

發佈於2024-11-09
瀏覽:877

Why Am I Getting \

未定義的符號:「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」

  • vtable(虛擬方法表): A data編譯器用來儲存指向類別的虛擬方法的指標的結構。它允許派生類別的物件呼叫虛擬方法的正確實作。
  • typeinfo(運行時類型資訊):儲存在物件記憶體中的信息,用於識別物件的類型。它支援動態類型檢查和多態行為。

解決錯誤

此錯誤的根本原因很可能是抽象基類 Obstacle 包含非- 純虛函數。當一個類別宣告了純虛函數(virtual void Method() = 0;)時,就表示衍生類別必須重寫其實作。

如果在 Obstacle 中定義了非純虛函數,編譯器將期望在基底類別或衍生類別中找到它們的實作。但是,如果未提供這些實現,編譯器將產生依賴這些函數的內部結構(vtable 和 typeinfo)。連結時,缺少的函數會導致未定義符號錯誤。

解決方案

要解決此問題,請確保聲明抽象基類 Obstacle 中的所有虛擬方法作為純虛函數。這迫使衍生類別重寫並實作這些方法。透過這樣做,將提供正確的虛擬方法實現,並且連結過程應該成功,並且不會出現未定義的符號錯誤。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3