2016-04-22 89 views
-7

此代碼:VISUAL C++不編譯我的代碼

#include <windows.h> 
int WINAPI _WinMain(HINSTANCE hInstance, 
    HINSTANCE hPrevInstance, 
    LPSTR lpCmdLine, 
    int nCmdShow); 

結果輸出:

LNK1120: 1 unresolved externals 

LNK2019: unresolved external symbol [email protected] reference in function "int _cdecl invoke_main (void)" (? [email protected]@Y AHZX) 

有人能告訴我這是什麼意思,如何解決?

+1

您已經顯示了WinMain函數的原型,但是您並未顯示實現此功能的位置。除了告訴編譯器一個函數存在之外,還必須使函數存在。 – user4581301

+2

這不是**編譯**的問題,這是連接**結果的問題。你只聲明'_WinMain(...)',實際的定義在哪裏? –

回答

3

LNK1120:1周無法解析的外部

一個或多個符號鏈接您的計劃已經得到解決。稍後更多。

LNK2019:解析的外部符號_WinMain @在函數 「INT _cdecl invoke_main(無效)」 丟失的符號[email protected]

命名一個16參考(invoke_main @@ÝAHZX?)。到底是什麼意味着對自己來說是一個相當長的回答。最好使用您選擇的網頁搜索查找「Name Mangling」和「Calling Convention」。

至於爲什麼_WinMain丟失,

int WINAPI _WinMain(HINSTANCE hInstance, 
    HINSTANCE hPrevInstance, 
    LPSTR lpCmdLine, 
    int nCmdShow); 

只說明程序員保證別的地方

int WINAPI _WinMain(HINSTANCE hInstance, 
    HINSTANCE hPrevInstance, 
    LPSTR lpCmdLine, 
    int nCmdShow) 
{ 
    // does stuff 
    return resultOfStuff; 
} 

存在的編譯器。

編譯器會很滿意這個承諾並繼續前進,相信程序員會在稍後的某個文件或其他文件中做好。

一旦所有的代碼都被編譯到目標文件中,鏈接程序就會出現,並嘗試將這些代碼組合到程序或庫中。它通過與承諾項目的地址匹配的承諾名稱的所有目標文件。

如果程序員說謊,那麼鏈接器將不會找到承諾的函數,將不會有地址使用,並會返回一條錯誤消息,指出該函數丟失。

解決方案:實現該功能。