visual C ++没有编译我的代码

时间:2016-04-22 22:09:43

标签: c++ visual-studio-2015 directx

此代码:

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

此输出结果:

LNK1120: 1 unresolved externals

LNK2019: unresolved external symbol _WinMain@16 reference in function "int _cdecl invoke_main (void)" (? invoke_main@@Y AHZX)

有人可以告诉我这意味着什么以及如何解决它?

1 个答案:

答案 0 :(得分:3)

  

LNK1120:1个未解析的外部

链接程序时,一个或多个符号未解析。稍后会详细介绍。

  

LNK2019:函数“int _cdecl invoke_main(void)”中未解析的外部符号_WinMain @ 16引用(?invoke_main @@ Y AHZX)

将缺少的符号之一命名为_WinMain@16。 @ 16最终意味着对自己来说是一个相当长的答案。最好通过您选择的网络搜索查找“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;
}

存在。

编译器会非常满意这个承诺并继续前进,相信程序员会在文件或其他文件中的某个稍后点处擅长。

一旦将所有代码编译成目标文件,链接器就会出现并尝试将各个部分组合到一个程序或库中。它遍历所有与承诺名称匹配的目标文件和承诺项目的地址。

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

解决方案:实现该功能。