g ++ undefined對typeinfo的引用我只是遇到了以下錯誤(并在線找到了解決方案,但它在Stack Overflow中不存在):(.gnu.linkonce。[stuff]):對[方法] [目標文件]的未定義引用:(。gnu.linkonce。[stuff]):對[classname]的`typeinfo的未定義引用為什么可能會得到這些“未定義的typeinfo引用”鏈接器錯誤之一?(如果你能解釋幕后發生的事情,可以給予獎勵。)
3 回答

臨摹微笑
TA貢獻1982條經驗 獲得超2個贊
一個可能的原因是因為您在沒有定義虛擬函數的情況下聲明它。
如果在沒有在同一編譯單元中定義它的情況下聲明它,則表明它已在其他位置定義 - 這意味著鏈接器階段將嘗試在其他編譯單元(或庫)中找到它。
定義虛函數的一個示例是:
virtual void fn() { /* insert code here */ }
在這種情況下,您將一個定義附加到聲明,這意味著鏈接器以后不需要解析它。
這條線
virtual void fn();
聲明fn()
而不定義它,并將導致您詢問的錯誤消息。
它與代碼非常相似:
extern int i;int *pi = &i;
表明整數i
是在另一個編譯單元中聲明的,必須在鏈接時解析(否則pi
不能設置為它的地址)。

FFIVE
TA貢獻1797條經驗 獲得超6個贊
混合-fno-rtti
和-frtti
編碼時也會發生這種情況。然后,您需要確保type_info
在-frtti
代碼中訪問的任何類都使用其密鑰方法進行編譯-frtti
。當您創建類的對象,使用dynamic_cast
等時,可能會發生此類訪問。

白衣染霜花
TA貢獻1796條經驗 獲得超10個贊
當聲明的(非純)虛函數缺少實體時會發生這種情況。在您的類定義中,類似于:
virtual void foo();
應該定義(內聯或鏈接的源文件):
virtual void foo() {}
或者聲明純虛擬:
virtual void foo() = 0;
- 3 回答
- 0 關注
- 501 瀏覽
添加回答
舉報
0/150
提交
取消