创建Windows窗口时出现C4003等编译错误求助
创建Windows窗口时出现C4003等编译错误求助
老哥,我帮你排查了代码里的问题,主要有3个点导致了编译错误,咱们逐个修复:
- 宽字符与窄字符不匹配:你定义窗口类名用的是宽字符字符串
L"Game Window Class",但CreateWindow的窗口标题用的是窄字符"Himesh Xakko",两者类型不兼容。解决方法是把标题也改成宽字符前缀L的格式,或者直接使用宽字符版本的APICreateWindowW(更推荐这种明确的写法)。 - 窗口尺寸参数错误:
CreateWindow的第7、8个参数分别是窗口宽度和高度,你写的1280 * 720是计算出了一个超大的数值(921600),而且高度填了0,这完全不符合窗口尺寸的逻辑。应该改成宽度1280,高度720。 - WinMain缺少返回值:C++要求
WinMain必须返回int类型的值,你的代码最后没有返回语句,会触发编译错误,需要补上返回逻辑(如果后续添加消息循环,可以返回消息循环的结果)。
修复后的完整代码如下:
#ifndef NOMINMAX # define NOMINMAX #endif #include <windows.h> LRESULT CALLBACK window_callback(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { return DefWindowProc(hwnd, uMsg, wParam, lParam); } int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd) { WNDCLASS window_class = {}; window_class.style = CS_HREDRAW | CS_VREDRAW; window_class.lpszClassName = L"Game Window Class"; window_class.lpfnWndProc = window_callback; RegisterClass(&window_class); // 修正了标题的宽字符、尺寸参数,同时显式使用CreateWindowW HWND hwnd = CreateWindowW( window_class.lpszClassName, L"Himesh Xakko", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 1280, 720, // 正确的宽度和高度 nullptr, nullptr, hInstance, nullptr ); // 添加消息循环让窗口保持运行(可选但必要,不然窗口会一闪而过) MSG msg = {}; while (GetMessage(&msg, nullptr, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int)msg.wParam; }
另外提一句:你之前加的NOMINMAX是为了避免windows.h里的min/max宏和标准库冲突,这个设置本身没问题,和当前的编译错误无关。
备注:内容来源于stack exchange,提问作者Monofen
相关产品推荐
相关产品推荐

