0

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 が Init() 関数ではなく WinMain() 関数で初期化されるという唯一の例外を除いて、チュートリアルからその初期化を実質的にコピーしました。

なぜ機能しないのですか、どうすれば解決できますか?

4

2 に答える 2

3

その構文は集約をコピー初期化するために機能しますが、あなたのものは実際には割り当てです。wcクラスのコンストラクターを実行すると、オブジェクトはデフォルトで構築されますRAT_RendererDX9

関数の割り当ては、Init実際にはこれと同等です。

wc.operator = (...);

その構文を使用したい場合は、割り当てを次のように変更してみてください。

WNDCLASSEX wndClass =
{
    sizeof( WNDCLASSEX ), CS_CLASSDC, MsgProc, 0, 0,
    GetModuleHandle( NULL ), NULL, NULL, NULL, NULL,
    "D3D Tutorial", NULL
};

wc = wndClass;
于 2013-02-06T21:48:27.433 に答える
1
WNDCLASSEX wndClass = { NULL };
于 2020-05-04T01:11:34.053 に答える