错误 LNK2019: 未解析的外部符号_WinMain@16在 function___tmainCRTStartup 中引用

当我运行下面的简单代码时,出现了以下两个错误:

#include <iostream>
#include <string>
using namespace::std;


template <class Type>
class Stack
{
public:
Stack (int max):stack(new Type[max]), top(-1), maxsize(max){}
~Stack (void) {delete []stack;}
void Push (Type &val);
void Pop (void) {if (top>=0) --top;}
Type& Top (void) {return stack[top];}
//friend ostream& operator<< (ostream&, Stack&);
private:
Type *stack;
int top;
const int maxSize;
};


template <class Type>
void Stack <Type>:: Push (Type &val)
{
if (top+1<maxsize)
stack [++top]=val;
}

错误:

Lib (crtexew.obj) : 错误 LNK2019: 函数 ___tmainCRTStartup中引用的未解析外部符号 _WinMain@16

我该怎么办?

260764 次浏览

您试图将源文件转换为可执行文件,这显然是不可能的,因为没有定义强制入口点 main函数。添加一个 main.cpp 文件并定义一个 main 函数。如果您使用的是命令行(我对此表示怀疑) ,那么可以将 /c添加到只编译而不是链接。这将只生成一个对象文件,该文件需要链接到静态或共享库或应用程序(在这种情况下,您将需要一个具有 main 定义的对象文件)。

在链接时,_WinMain是微软对 main的称呼。

另外: 你还没有运行代码,你是 编译中(和链接)它。 c + + 不是一个直译语言。

那是连接器的问题。

尝试更改属性-> 链接器-> 系统-> 子系统(在 VisualStudio 中)。

WINDOWS (/子系统: WINDOWS)控制台(/子系统: 控制台)

这个帮了我

正如其他人提到的,您可以将子系统更改为控制台,错误将消失。

或者如果你想保留 Windows 子系统,你只需要提示你的入口点是什么,因为你还没有定义 ___tmainCRTStartup。可以通过在 属性-> 链接器-> 命令行中添加以下内容来实现这一点:

/条目: “ mainCRTStartup”

这样就可以去掉控制台窗口。

我没看到主要功能。

请确保它有主要功能。

例如:

int main(int argc, TCHAR *argv[]){


}

希望它能起作用。 :)

如果你使用 Unicode字符设置,但是没有设置条目,你可以指定/ENTRY: “ wwinMaincrtStartup”

包括 <tchar.h>,其中包括:

#define _tWinMain wWinMain

如果您的项目是 Dll,那么链接器可能需要构建一个控制台程序。打开项目属性。选择常规设置。在那里选择配置类型 Dynamic Library (。Dll).

如果您有这个问题并且正在使用 Qt-您需要链接 qtmain.lib 或 qtmain.lib

如果你使用的是 CMake,你也可以在设置控制台应用的时候得到这个错误。

我不知道该在哪里发布我的答案,但我认为这是正确的地方。 我今天碰到了这个错误切换子系统并没有改变什么。

把64位的 lib 文件改成32位(x86)对我来说很有用,我希望它能帮到其他人!

除了像其他人说的那样将其改为 Console (/SUBSYSTEM:CONSOLE)之外,您可能还需要在 Properties-> Linker-> Advanced-> Entry Point 中更改 入口。设成 启动

如果您没有另外指定,那么 VisualStudio 似乎正在搜索 WinMain 函数而不是 main 函数。

如果实际上希望使用 _ tWinMain ()而不是 < strong > main () 确保您的项目相关配置具有

  1. 链接器-> 系统-> 子系统 = > WINDOWS (/子系统: WINDOWS)
  2. C/C + +-> 预处理器-> 预处理器定义 = > 用 _ WINDOWS 替换 _ CONSOLE
  3. 在定义 _ tWinMain ()的 c/cpp 文件中,添加:

    #include <Windows.h> #include <tchar.h>

上述博学的建议将解决99.99% 的问题。幸运的是他们没有。在我的案例中,我包含了一个来自另一个 Windows 项目的头文件。果然,在文件的最底部我找到了指令:

#pragma comment(linker, "/subsystem:Windows")

不用说,删除这条线解决了我的问题。