Почему я не могу инициализировать WNDCLASSEX wc?

Я объявляю атрибут 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 ().

Почему это не работает и как я могу решить это?

0

Решение

Этот синтаксис работает для копия инициализация совокупность, но ваш на самом деле назначение. Предмет 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;
3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector