当我运行如下的简单代码时,我有以下两个错误:
#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:函数
_WinMain@16
中引用的未解析的外部符号___tmainCRTStartup
我该怎么办?
答案 0 :(得分:337)
这是一个链接器问题。
尝试更改属性 - &gt;链接器 - &gt;系统 - &gt; SubSystem(在Visual Studio中)。
从 Windows(/ SUBSYSTEM:WINDOWS)到控制台(/ SUBSYSTEM:CONSOLE)
答案 1 :(得分:79)
正如其他人提到的那样,你可以将SubSystem更改为Console,错误就会消失。
或者如果您想保留Windows子系统,您可以只提示您的入口点,因为您尚未定义___tmainCRTStartup
。您可以通过将以下内容添加到属性 - &gt;来执行此操作。链接器 - &gt;命令行:
/ ENTRY: “mainCRTStartup”
这样你摆脱了控制台窗口。
答案 2 :(得分:9)
如果您遇到此问题且正在使用Qt - 您需要链接qtmain.lib或qtmaind.lib
答案 3 :(得分:8)
包括<tchar.h>
,其中包含以下行:
#define _tWinMain wWinMain
答案 4 :(得分:6)
如果使用Unicode字符集,但未设置条目,则可以指定/ ENTRY:“wWinMainCRTStartup”
答案 5 :(得分:6)
除了像其他人所说的那样将其更改为a
之外,您可能需要更改属性中的入口点 - &gt;链接器 - &gt;高级 - &gt;入口点。将其设置为 mainCRTStartup 。
如果你没有另外指定,似乎Visual Studio可能正在搜索WinMain函数而不是main函数。
答案 6 :(得分:4)
我没有看到主要功能。
请确保它具有主要功能。
示例:
int main(int argc, TCHAR *argv[]){
}
希望它运作良好。 :)
答案 7 :(得分:3)
如果你的项目是Dll,那么情况可能是链接器想要构建一个控制台程序。打开项目属性。选择常规设置。选择配置类型动态库(.dll)。
答案 8 :(得分:2)
您试图将该源文件转换为可执行文件,这显然是不可能的,因为未定义强制入口点main
函数。添加文件main.cpp并定义主函数。如果您正在使用命令行(我怀疑),您可以添加/c
仅编译而不是链接。这将只生成一个目标文件,需要链接到静态或共享库或应用程序(在这种情况下,您需要一个主要定义的oject文件)。
_WinMain
是Microsoft main
的名称。
另外:你还没有运行代码,你正在编译(并链接)它。 C ++不是解释性语言。
答案 9 :(得分:2)
我不知道在哪里发布我的答案,但我认为它是正确的地方。 我今天遇到了这个错误,切换子系统并没有改变一件事。
将64位lib文件更改为32位(x86)对我来说很有用,我希望它可以帮助那些人!
答案 10 :(得分:1)
如果您使用的是CMake,则在控制台应用程序上设置SET(GUI_TYPE WIN32)
时也会出现此错误。
答案 11 :(得分:1)
如果您实际上要使用 _tWinMain()而不是 main() 确保您的项目相关配置具有
在定义 _tWinMain()的c / cpp文件中,添加:
#include <Windows.h>
#include <tchar.h>
答案 12 :(得分:0)
上面提到的博学多闻的建议将在99.99%的情况下解决该问题。幸运的是,他们没有。就我而言,事实是我包含了另一个Windows项目中的头文件。果然,在该文件的最底部,我找到了指令:
#pragma comment(linker, "/subsystem:Windows")
不用说,删除此行解决了我的问题。