亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

g ++ undefined對typeinfo的引用

g ++ undefined對typeinfo的引用

C++
元芳怎么了 2019-08-12 15:07:11
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不能設置為它的地址)。


查看完整回答
反對 回復 2019-08-12
?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

混合-fno-rtti-frtti編碼時也會發生這種情況。然后,您需要確保type_info-frtti代碼中訪問的任何類都使用其密鑰方法進行編譯-frtti。當您創建類的對象,使用dynamic_cast等時,可能會發生此類訪問。


查看完整回答
反對 回復 2019-08-12
?
白衣染霜花

TA貢獻1796條經驗 獲得超10個贊

當聲明的(非純)虛函數缺少實體時會發生這種情況。在您的類定義中,類似于:

virtual void foo();

應該定義(內聯或鏈接的源文件):

virtual void foo() {}

或者聲明純虛擬:

virtual void foo() = 0;


查看完整回答
反對 回復 2019-08-12
  • 3 回答
  • 0 關注
  • 501 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號