首頁 > 後端開發 > C++ > 主體

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

Susan Sarandon
發布: 2024-11-03 15:30:30
原創
378 人瀏覽過

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

解決錯誤

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

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

解決方案

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

以上是為什麼我的 C 程式碼中會出現「vtable」和「typeinfo」未定義符號錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!