對Typeinfo 的未定義引用:原因和解決方法
可怕的「對typeinfo 的未定義引用」錯誤可能會困擾C開發人員,讓他們感到困惑它的起源。在幕後,當連結器偶然發現沒有相應定義的虛擬函數聲明時,就會出現此錯誤。
虛擬函數設計為在衍生類別中重寫,從而實現多態行為。但是,聲明虛擬函數而不定義其定義意味著該定義位於其他地方。這會強制連結器搜尋外部編譯單元或函式庫以查找遺失的定義。如果連結器無法找到它,則會出現「對 typeinfo 的未定義引用」錯誤。
考慮此聲明:
virtual void fn();
此聲明通知編譯器 fn() 是一個虛函數但沒有提供其實作。連結器會在連結階段將其標記為未解析的符號,從而導致錯誤。
要修正此問題,您必須提供虛函數的定義:
virtual void fn() { /* Implementation here */ }
透過附加聲明的定義,連結器不再需要搜尋遺失的符號。
此錯誤類似於以下程式碼snippet:
extern int i; int *pi = &i;
在這種情況下,i 被宣告為位於另一個編譯單元中的外部變數。這就需要連結器解析外部引用,但如果找不到i,就會報未解析的符號錯誤。
透過了解「undefined reference to typeinfo」錯誤的根本原因,開發者可以及時排查問題並透過為虛擬函數提供正確的定義或適當地處理外部符號引用來解決問題。
以上是為什麼我在 C 中收到「未定義的 Typeinfo 引用」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!