inline和無法解析的外部符號

2021-08-22 04:29:47 字數 761 閱讀 1894

乙個有趣的現象

2018/8/2,今天在練習類的使用的時候,發現了乙個問題,當類的宣告和實現在不同檔案實現的時,在main函式中呼叫該類的函式,編譯器總是報錯,無法解析的外部符號(類的函式無法找到)

在確認了標頭檔案的名字已經被包含在了實現檔案中以及main函式的檔案中,我終於發現了問題在於inline關鍵字

因為想盡可能的節省開銷,所以想把一些 建構函式 析構函式 簡單函式 等都命名為inline函式,

但同時遵循定義和宣告分開的原則,在另乙個檔案中將這些類的函式定義為了inline函式,然後就發生了上述悲劇。

所謂inline,就是編譯器實際不產生函式和函式呼叫,而是將函式實現直接內嵌在呼叫的**處。

既然如此,在你的靜態庫中定義乙個inline函式,又要呼叫者看見它怎麼可能呢?

c++編譯器只能將源**嵌入,而沒辦法從外部庫中將機器**嵌入。

1.在類的宣告中就直接完成內聯函式的定義,無須inline關鍵字

2.在類的宣告檔案的後部,用inline關鍵字完成定義,因為和宣告在同乙個檔案中,所以編譯器可以找到他

3.在別的檔案中定義時候,就不能再加inline關鍵字了

error LNK2019 無法解析的外部符號

在mfc中編譯時出現了以下錯誤 提示為error lnk2019 無法解析的外部符號 wchar t stdcall com util convertstringtobstr char const 1。我先介紹一下,vs編譯器中的乙個選項 zc wchar t wchar t 是本機型別 在vc6。...

error LNK2001 無法解析的外部符號

vc 時經常會遇到鏈結錯誤lnk2001,該錯誤非常討厭,因為對於程式設計者來說,最好改的錯誤莫過於編譯錯誤,而一般說來發生連線錯誤時,編譯都已通過。產生連線錯誤的原因非常多,尤其lnk2001錯誤,常常使人不明其所以然。如果不深入地學習和理解vc 要想改正連線錯誤lnk2001非常困難。初學者在學...

error LNK2001 無法解析的外部符號

vc 時經常會遇到鏈結錯誤lnk2001,該錯誤非常討厭,因為對於程式設計者來說,最好改的錯誤莫過於編譯錯誤,而一般說來發生連線錯誤時,編譯都已通過。產生連線錯誤的原因非常多,尤其lnk2001錯誤,常常使人不明其所以然。如果不深入地學習和理解vc 要想改正連線錯誤lnk2001非常困難。初學者在學...