当我运行如下的简单代码时,我有两个错误如下:
#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 回答
如果你的项目是Dll,那么情况可能是链接器想要构建一个控制台程序 . 打开项目属性 . 选择常规设置 . 选择配置类型Dynamic Library(.dll) .
包含
<tchar.h>
,其中包含以下行:正如其他人所提到的,您可以将SubSystem更改为Console,错误将消失 .
或者,如果您想保留Windows子系统,您只需提示您的入口点,因为您尚未定义
___tmainCRTStartup
. 您可以通过将以下内容添加到“属性” - >“链接器” - >“命令行”来执行此操作:这样你摆脱了控制台窗口 .
这是一个链接器问题 .
尝试更改属性 - >链接器 - >系统 - >子系统(在Visual Studio中) .
从Windows(/ SUBSYSTEM:WINDOWS)到控制台(/ SUBSYSTEM:CONSOLE)
This one helped me
我没有看到主要功能 .
请确保它具有主要功能 .
例子:
希望它运作良好 . :)
我不知道在哪里发布我的答案,但我认为这是正确的地方 . 我今天遇到了这个错误,切换子系统并没有改变一件事 .
将64位lib文件更改为32位(x86)对我来说很有用,我希望它可以帮助那些人!
如果您使用Unicode字符集,但未设置条目,则可以指定/ ENTRY:“wWinMainCRTStartup”
你试图把那个源文件变成一个可执行文件,这显然是不可能的,因为强制入口点,
main
函数,isn 't defined. Add a file main.cpp and define a main function. If you'正在命令行上工作(我怀疑),你可以添加/c
只编译而不是链接 . 这将只生成一个目标文件,需要将其链接到静态或共享库或应用程序(在这种情况下,您需要一个主要定义的对象文件) ._WinMain
是链接时main
的Microsoft名称 .另外:你还没有运行代码,你正在编译(和链接)它 . C不是解释语言 .
如果您遇到此问题并且正在使用Qt - 您需要链接qtmain.lib或qtmaind.lib
如果您使用的是CMake,则在控制台应用程序上设置
SET(GUI_TYPE WIN32)
时也会出现此错误 .除了将其更改为
Console (/SUBSYSTEM:CONSOLE)
之外,您可能需要更改属性 - >链接器 - >高级 - >入口点中的 entry point . 将其设置为 mainCRTStartup .如果您没有另外指定,似乎Visual Studio可能正在搜索WinMain函数而不是main .