错误LNK2019:函数___tmainCRTStartup中引用的未解析的外部符号_WinMain @ 16

NAI*_*IEM 135 c++ visual-studio visual-c++

当我运行如下的简单代码时,我有两个错误如下:

#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;
}
Run Code Online (Sandbox Code Playgroud)

错误:

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

我该怎么办?

Boh*_*dan 344

这是一个链接器问题.

尝试更改属性 - >链接器 - >系统 - >子系统(在Visual Studio中).

Windows(/ SUBSYSTEM:WINDOWS)控制台(/ SUBSYSTEM:CONSOLE)

这个帮助了我

  • 我有同样的问题.你的答案没有帮助.还有其他建议吗? (3认同)
  • 如果使用`tWinMain`作为主函数,则必须包含tchar.h _or_将其更改为"WinMain"或"wWinMain",具体取决于您的应用程序是否为Unicode.即使使用正确的子系统,如果不这样做也会产生此链接器错误.(/ SUBSYSTEM:WINDOWS) (2认同)

Mor*_*sen 82

正如其他人所提到的,您可以将SubSystem更改为Console,错误将消失.

或者,如果您想保留Windows子系统,您可以只提示您的入口点,因为您尚未定义___tmainCRTStartup.您可以通过将以下内容添加到" 属性" - >"链接器" - >"命令行"来执行此操作:

/ ENTRY: "mainCRTStartup"

这样你摆脱了控制台窗口.

  • +1:"这样你摆脱了控制台窗口." - 很酷!学到了...... 今天新! (3认同)

Dav*_*per 12

如果您遇到此问题并且正在使用Qt - 您需要链接qtmain.lib或qtmaind.lib


mat*_*sfk 10

除了将其更改为Console (/SUBSYSTEM:CONSOLE)如其他人所说的,你可能需要更改入口点的属性- >链接器- >高级- >入口点.将其设置为mainCRTStartup.

如果您没有另外指定,似乎Visual Studio可能正在搜索WinMain函数而不是main.


zak*_*aki 9

包括<tchar.h>哪一行:

#define _tWinMain wWinMain
Run Code Online (Sandbox Code Playgroud)


Pet*_*ius 6

如果使用Unicode字符集,但未设置条目,则可以指定/ ENTRY:"wWinMainCRTStartup"


Ale*_*lex 5

如果您确实想使用_tWinMain()而不是main(), 请确保您的项目相关配置已

  1. 链接器->系统->子系统=>Windows(/SUBSYSTEM:WINDOWS)
  2. C/C++ -> 预处理器 -> 预处理器定义 => 将 _CONSOLE 替换为 _WINDOWS
  3. 在定义_tWinMain()的c/cpp文件中,添加:

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


rub*_*nvb 2

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

_WinMain是 Microsoft 的main链接名称。

另外:您还没有运行代码,您正在编译(和链接)它。C++ 不是解释性语言。

  • 实际上,他需要一个 [`WinMain(HINSTANCE, HINSTANCE, LPSTR, INT)`](http://msdn.microsoft.com/en-us/library/ms633559%28v=vs.85%29.aspx) 入口点。此链接器错误表明该项目是为 Windows 子系统而不是控制台子系统构建的。 (7认同)