首页 文章

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

提问于
浏览
128

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

#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;
}

错误:

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

我该怎么办?

11 回答

  • 4

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

  • 325

    包含 <tchar.h> ,其中包含以下行:

    #define _tWinMain wWinMain
    
  • 76

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

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

    / ENTRY:“mainCRTStartup”

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

  • 9

    这是一个链接器问题 .

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

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

    This one helped me

  • 2

    我没有看到主要功能 .

    请确保它具有主要功能 .

    例子:

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

    希望它运作良好 . :)

  • 6

    我不知道在哪里发布我的答案,但我认为这是正确的地方 . 我今天遇到了这个错误,切换子系统并没有改变一件事 .

    将64位lib文件更改为32位(x86)对我来说很有用,我希望它可以帮助那些人!

  • 2

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

  • 7

    你试图把那个源文件变成一个可执行文件,这显然是不可能的,因为强制入口点, main 函数,isn 't defined. Add a file main.cpp and define a main function. If you'正在命令行上工作(我怀疑),你可以添加 /c 只编译而不是链接 . 这将只生成一个目标文件,需要将其链接到静态或共享库或应用程序(在这种情况下,您需要一个主要定义的对象文件) .

    _WinMain 是链接时 main 的Microsoft名称 .

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

  • 3

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

  • 1

    如果您使用的是CMake,则在控制台应用程序上设置 SET(GUI_TYPE WIN32) 时也会出现此错误 .

  • 6

    除了将其更改为 Console (/SUBSYSTEM:CONSOLE) 之外,您可能需要更改属性 - >链接器 - >高级 - >入口点中的 entry point . 将其设置为 mainCRTStartup .

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

相关问题