我刚开始学习C++,我遇到了一个我无法修复的错误。
到目前为止,以下是我所有的代码(甚至连hello world都无法工作):
#include "stdafx.h"
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, L"Hello World!",
L"Hello World!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}但是当我试图运行它时,这会产生这个错误:
Test.cpp(11):错误C2373:'WinMain‘:重新定义;不同类型的修饰符C:\Program (x86)\Microsoft \Windows\v7.0A\include\winbase.h(2588):参见'WinMain’的声明。
当我查看WinMain的声明时,我看到在每个参数之前都有一个"__in“。我试着加了那个,但没有运气。我也尝试用回调替换WINAPI,但这也不起作用。
发布于 2013-01-20 19:46:47
简单的解决办法是
main 使用标准的函数。
如下所示:
#undef UNICODE
#define UNICODE
#incude <windows.h>
int main()
{
MessageBox(
0,
L"Hello World!",
L"Hello World!",
MB_ICONEXCLAMATION | MB_SETFOREGROUND
);
}现在,您唯一的问题是使用Microsoft的工具集将其构建为GUI子系统应用程序,这在这方面比延迟更多( GNU工具链没有这样的问题)。
为此,在微软的link中,使用这个链接器选项(除了选择GUI子系统):/entry:mainCRTStartup。
请注意,您可以将该选项放入名为LINK的环境变量中。
快乐编码!:-)
发布于 2013-01-20 20:28:34
WinMain是一个C函数,因此您需要用extern "C"包装它
#include "stdafx.h"
#include <windows.h>
extern "C"
{
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, L"Hello World!",
L"Hello World!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
}https://stackoverflow.com/questions/14428429
复制相似问题