为啥我不能初始化 WNDCLASSEX wc?

Posted

技术标签:

【中文标题】为啥我不能初始化 WNDCLASSEX wc?【英文标题】:Why can't I initialize WNDCLASSEX wc?为什么我不能初始化 WNDCLASSEX wc? 【发布时间】:2013-02-06 21:44:07 【问题描述】:

我在头文件中声明属性WNDCLASSEX wc,如下所示:

private:
    HWND hWnd;
    LPDIRECT3D9 g_pD3D; // Used to create the D3DDevice
    LPDIRECT3DDEVICE9 g_pd3dDevice; // Our rendering device
    WNDCLASSEX wc;

我想在我的 Init() 函数中初始化它,如下所示:

void RAT_RendererDX9::Init(RAT_WindowManager* argWMan)

    wMan = argWMan;

    // Register the window class
    wc  =
    
        sizeof( WNDCLASSEX ), CS_CLASSDC, MsgProc, 0, 0,
        GetModuleHandle( NULL ), NULL, NULL, NULL, NULL,
        "D3D Tutorial", NULL
    ;
    RegisterClassEx( &wc );

       hWnd = CreateWindow( "", "abc", WS_OVERLAPPEDWINDOW, 10, 10, 20, 20,
                     NULL, NULL, wc.hInstance, NULL );

        g_pD3D = (LPDIRECT3D9)Direct3DCreate9( D3D_SDK_VERSION );

        D3DPRESENT_PARAMETERS d3dpp;
        ZeroMemory( &d3dpp, sizeof( d3dpp ) );
        d3dpp.Windowed = TRUE;
        d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
        d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;

    g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                              D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                              &d3dpp, &g_pd3dDevice );

但是,我因此收到以下错误:

1>e:\rat_engine\rat_engine\rat_engine\rat_rendererdx9.cpp(18): 错误 C2059:语法错误:''

1>e:\rat_engine\rat_engine\rat_engine\rat_rendererdx9.cpp(18): 错误 C2143:语法错误:缺少“;”在''之前

1>e:\rat_engine\rat_engine\rat_engine\rat_rendererdx9.cpp(19): 错误 C3867:“RAT_ENGINE::RAT_RendererDX9::MsgProc”:缺少函数调用 参数列表;使用 '&RAT_ENGINE::RAT_RendererDX9::MsgProc' 创建一个 指向成员的指针

1>e:\rat_engine\rat_engine\rat_engine\rat_rendererdx9.cpp(22): 错误 C2143:语法错误:缺少“;”在''之前

但我实际上从教程中复制了该初始化,唯一的例外是 wc 在 WinMain() 函数中初始化,而不是在 Init() 函数中。

为什么它不起作用,我该如何解决?

【问题讨论】:

【参考方案1】:

该语法适用于复制初始化一个聚合,但你的实际上是一个赋值。当您执行 RAT_RendererDX9 类的构造函数时,对象 wc 会默认构造。

Init 函数中的赋值实际上等价于:

wc.operator = (...);

如果您想使用该语法,您可以尝试将分配更改为以下内容:

WNDCLASSEX wndClass =

    sizeof( WNDCLASSEX ), CS_CLASSDC, MsgProc, 0, 0,
    GetModuleHandle( NULL ), NULL, NULL, NULL, NULL,
    "D3D Tutorial", NULL
;

wc = wndClass;

【讨论】:

【参考方案2】:
WNDCLASSEX wndClass =  NULL ;

【讨论】:

你应该解释一下你的答案是做什么的以及它为什么能解决问题。

以上是关于为啥我不能初始化 WNDCLASSEX wc?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能在类的成员函数中初始化 QThread?

为啥我不能使用'0x80000000'来初始化一个int数组?

为啥我不能使用 constexpr 全局变量来初始化 constexpr 引用类型?

为啥我不能在初始化列表中使用箭头运算符?

为啥我不能像往常一样初始化 typedef struct string 或 char?

我不知道为啥我不能在 C++ 中初始化一个数组的数组