1. 程式人生 > >【C++】error LNK2019: 無法解析的外部符號 "public: void __thiscall

【C++】error LNK2019: 無法解析的外部符號 "public: void __thiscall

出現這個錯誤,應該首先檢視“#include”語句是否包含,或者是否包含正確。符號無法解析意味著編譯器知道有這個符號存在,也就是有宣告,但在連結時,找不到實現程式碼,那麼就去看看報錯的這個函式有沒有實現程式碼。如果它們的確已經有了,還是出現這個錯誤,就把它們重新編譯一下。

根據個人遇到這個錯誤時的記錄,原因可以分為一下幾種:

原因一:只是在.h裡面聲明瞭某個方法,沒有在cpp裡面實現
具體講,有時候在標頭檔案中聲明瞭需要的方法,確實忘記了在原始檔中實現;
有時候在標頭檔案中聲明瞭需要的方法,在原始檔中實現了該方法,但是卻遺留了方法名前的“classname::”;
有時候在標頭檔案中宣告並實現了需要的方法,但是在程式碼調整時直接把方法copy到原始檔時,並沒有在函式前加“classname::”;


原因二:宣告和實現都有了,但是沒有新增到vs的project

目錄下面,這時候如果在其他.cpp中引用的,就會出現這個錯誤。
具體講,匯入自己以前的程式碼或其他現有程式碼時,複製到工程下目標資料夾後,有時候會在vs的project目錄下忘記或遺漏新增這些檔案,就可能引起這個錯誤。


原因三:有時候工程比較大時,會直接加入一些原有的基礎工程來提交效率,如果對原有工程不太熟悉,在工程中加入了有相同名字的檔案或者類時,同樣會引起這個問題。
這種情況下的具體原因是編譯時會出現相同名字的中間檔案,因為編譯有先後順序,出現了檔案替換,在其他檔案引用被替換掉的檔案時,導致最後會出現了個連線問題。

原因四:行內函數相關,如果行內函數的宣告在標頭檔案中,實現在原始檔中,這時候如果其他類中只是包含了標頭檔案,在呼叫這個行內函數時也會出現這個問題。此時把函式實現放到標頭檔案中,或者把.cpp也include進來,就可以解決問題。

原因五:如果這個類是動態庫中定義的類,可能是因為沒有把這個動態庫對應的.lib檔案加到工程中。

原文地址:http://blog.csdn.NET/tobefxz/article/details/22154469

Taily老段的微信公眾號,歡迎交流學習