2013-04-15 3 views
1

Я использую Входит DirectX 11 игры Программирование Аллен Sherrod, Венди Джонс книги и у меня возникли проблемы с помощью следующего кода:C2259 ошибка (DirectX 11)

#include <Windows.h> 
#include <memory> 
#include "BlankDemo.h" 

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, 
        WPARAM wParam, LPARAM lParam); 

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE prevInstance, 
     LPWSTR cmdLine, int cmdShow) 
{ 
UNREFERENCED_PARAMETER(prevInstance); 
UNREFERENCED_PARAMETER(cmdLine); 

WNDCLASSEX wndClass = {0}; 
wndClass.cbSize = sizeof(WNDCLASSEX); 
wndClass.style = CS_HREDRAW | CS_VREDRAW; 
wndClass.lpfnWndProc = WndProc; 
wndClass.hInstance = hInstance; 
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); 
wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); 
wndClass.lpszMenuName = NULL; 
wndClass.lpszClassName = "DX11BookWindowClass"; 

if(!RegisterClassEx (&wndClass)) 
    return -1; 

RECT rc = {0, 0, 640, 480}; 
AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE); 

HWND hwnd = CreateWindowA("DX11BookWindowClass","BlankWin32Window",WS_OVERLAPPEDWINDOW, 
    CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left, 
    rc.bottom - rc.top, NULL,NULL,hInstance,NULL); 

if(!hwnd) 
    return -1; 
ShowWindow(hwnd,cmdShow); 

BlankDemo* demo = new BlankDemo(); 

bool result = demo->Initialize(hInstance, hwnd); 

if(result == false) 
    return -1; 

MSG msg = {0}; 

while(msg.message != WM_QUIT) 
{ 
    if(PeekMessage(&msg,0,0,0,PM_REMOVE)) 
    { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 
    else 
    { 
     demo->Update(0.0f); 
     demo->Render(); 
    } 
} 

demo->Shutdown(); 

return static_cast<int>(msg.wParam); 
} 

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, 
        WPARAM wParam, LPARAM lParam) 
{ 
PAINTSTRUCT paintStruct; 
HDC hDC; 

switch(message) 
{ 
case WM_PAINT: 
    hDC = BeginPaint(hwnd, &paintStruct); 
    EndPaint(hwnd, &paintStruct); 
    break; 

case WM_DESTROY: 
    PostQuitMessage(0); 
    break; 

default: 
    return DefWindowProc(hwnd, message, wParam, lParam); 
} 
return 0; 
}  

Я получаю IntelliSense: объект абстрактного класса типа " BlankDemo "не допускается ошибка. класс:

#ifndef _BLANK_DEMO_H_ 
#define _BLANK_DEMO_H_ 

#include "DemoBase.h" 

class BlankDemo : public Dx11DemoBase 
{ 
public: 
BlankDemo(); 
virtual ~BlankDemo(); 

bool LoadContent(); 
void UnloadContent(); 

void Upadate(float dt); 
void Render(); 
}; 

#endif 
+0

Я не уверен, что 'Dx11DemoBase' есть, но она имеет абстрактные части, которые вы не отменяют. – quantum

ответ

0

Вы ошиблись на одну из своих функций.

void Upadate(float dt); 

должен быть

void Update(float dt); 

Опечатки, как это было распространенной ошибкой в ​​более ранних версиях C++. При компиляции C++ 11, вы можете иметь компилятор проверить свои намерения с:

void Update(float dt) override; 
+0

thx я потерял 2 часа на решение этого вопроса :) –

+0

@BrunoBrunolav Счастливые помочь. И добро пожаловать в переполнение стека. –