You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 15:08:12