G : 了解「未定義的Typeinfo 引用」錯誤
編譯C 程式時常遇到「未定義的TypeInfo 引用」錯誤克。它表示連結器無法找到特定類別的類型信息,這可能有多種原因。
原因:聲明沒有定義的虛擬函數
一個常見原因此錯誤是在聲明虛擬函數時未在同一編譯單元中提供其定義。當你宣告一個虛函數而不定義它時,你就表明它的定義存在於其他地方,要麼在後續的編譯單元中,要麼在外部函式庫中。
因此,在連結階段,編譯器會在其他地方搜尋該虛擬函數的定義。目標檔案或庫。如果找不到定義,則會引發「對 typeinfo 的未定義引用」錯誤。
範例:不正確的聲明
virtual void fn();
此聲明通知編譯器名稱為 fn()的虛擬函數存在,但它沒有提供具體的
範例:正確的定義
virtual void fn() { /* Implementation code here */ }
當您向虛函數提供定義時,連結器不再需要在其他地方搜尋它,從而解決了錯誤。
類比:外部變數解決方案
該行為類似於在一個編譯單元中聲明外部變數並嘗試在另一個單元中存取它而不提供明確定義:
extern int i; int *pi = &i;
這裡,變數i 是外部宣告的,表示它的定義位於另一個編譯單元。如果此定義在連結時不可用,編譯器將產生「未定義引用」錯誤。
了解此錯誤的根本原因對於避免該錯誤並確保成功編譯 C 程式碼至關重要。
以上是為什麼 g 會產生「對 typeinfo 的未定義參考」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!