2016-04-22 87 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; 
} 

存在的编译器。

编译器会很满意这个承诺并继续前进,相信程序员会在稍后的某个文件或其他文件中做好。

一旦所有的代码都被编译到目标文件中,链接程序就会出现,并尝试将这些代码组合到程序或库中。它通过与承诺项目的地址匹配的承诺名称的所有目标文件。

如果程序员说谎,那么链接器将不会找到承诺的函数,将不会有地址使用,并会返回一条错误消息,指出该函数丢失。

解决方案:实现该功能。