2014-10-22 161 views
-1

我有功能findId(常量QString的&名)拋出我coompilation過程中出現錯誤:錯誤LNK2019:解析外部符號:: FindWindow函數()函數

error LNK2019: unresolved external symbol [email protected] referenced in function "private: unsigned int__thiscall MainClass::findId(class QString const &)"([email protected]@@[email protected]@@Z)

mainclass.cpp:

WId MainClass::findId(const QString& name) 
{ 
    return (WId) ::FindWindow(NULL, (TCHAR*)name.utf16()); 
} 

我不知道問題出在哪裏,因爲我之前在其他項目中使用過這個代碼,並且在那裏工作。也許我錯過了什麼。

+0

如果重新標記您的問題,您將得到更好的答案。什麼語言?什麼OS?什麼技術?什麼編譯器? 'lnk2019'不是一個有用的標籤。 – 2014-10-22 08:16:31

+2

FindWindow需要Windows.h和User32.lib – 2014-10-22 08:26:18

+2

鏈接器無法找到':: FindWindow(...)'的定義。你確定有嗎? – CinCout 2014-10-22 08:26:22

回答

2

解決方案資源管理器中,您有幾個選項卡。其中一個標籤名爲「物業經理」,打開此選項卡。在這個標籤中你會找到你的項目及其配置。它實際上包含的內容是屬性表,其中之一是「核心Windows庫」。如果你右鍵單擊這個,然後轉到鏈接器 - >輸入,你會發現Windows庫user32.lib等等。這些屬性由你的項目通過%(AdditionalDependencies)繼承。

其中一件事情在當前項目中沒有正確設置。

+0

一個'編譯指示評論'更適合這種情況IMO。 – cybermonkey 2014-10-22 08:58:12

+0

錯誤我刪除%(AdditionalDependencies),同時添加我的庫。現在它工作,謝謝 – 2014-10-22 09:14:59

2

鏈接器正在嘗試編譯您的應用程序,但無法完成,因爲它不知道FindWindow所指的是什麼,因爲您尚未使用函數所需的user32庫。 以下代碼將修復它。

 #prama comment(lib, "user32.lib")  
     WId MainClass::findId(const QString& name) 
     { 
      return (WId) ::FindWindow(NULL, (TCHAR*)name.utf16()); 
     } 

這是從您提供的代碼工作,可能有更多的代碼。 如果是這樣,只需#pragma comment(lib, "user32.lib")之後你的#include塊,但在你的任何功能或namespace之前。

MSDN KB article on this issue下面的示例將保證LNK2019錯誤:

// LNK2019.cpp 
// LNK2019 expected 
extern char B[100]; // B is not available to the linker 
int main() { 
    B[0] = ' '; 
} 
相關問題