I am getting a linking error:
FirstGame error LNK2001: unresolved external symbol "protected: static class GameEngine * GameEngine::m_pGameEngine" (?m_pGameEngine@GameEngine@@1PAV1@A)
Here is my code, can anyone help me with it
GameEngine.h
FirstGame.cppCode:BOOL GameInitialize(HINSTANCE hInstance); void GameStart(HWND hWindow); void GameEnd(); void GameActivate(HWND hWindow); void GameDeactivate(HWND hWindow); void GamePaint(HDC hDC); void GameCycle(); class GameEngine { protected: //Member Variables static GameEngine* m_pGameEngine; HINSTANCE m_hInstance; HWND m_hWindow; TCHAR m_szWindowClass[32]; TCHAR m_szTitle[32]; WORD m_wIcon, m_wSmallIcon; int m_iWidth, m_iHeight; int m_iFrameDelay; BOOL m_bSleep; public: GameEngine(HINSTANCE hInstance, LPTSTR szWindowClass, LPTSTR szTitle, WORD wIcon, WORD wSmallIcon,int iWidth=640, int iHeight=480); virtual ~GameEngine(); //General Methods static GameEngine* GetEngine(){ return m_pGameEngine; }; BOOL Initialize(int iCmdShow); LRESULT HandleEvent(HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam); //Accessor Methods HINSTANCE GetInstance(){return m_hInstance;}; HWND GetWindow(){return m_hWindow;}; void SetWindow(HWND hWindow){m_hWindow=hWindow;}; LPTSTR GetTitle(){return m_szTitle;}; WORD GetIcon(){return m_wIcon;}; WORD GetSmallIcon() { return m_wSmallIcon;}; int GetWidth(){ return m_iWidth;}; int GetHeight(){ return m_iHeight;}; int GetFrameDelay(){return m_iFrameDelay;}; void SetFrameRate(int iFrameRate){m_iFrameDelay =1000/iFrameRate;}; BOOL GetSleep(){return m_bSleep;}; void SetSleep(BOOL bSleep){m_bSleep=bSleep;}; }; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { MSG msg; static int iTickTrigger=0; int iTickCount; if(GameInitialize(hInstance)) { //Initialize the game engine if(!GameEngine::GetEngine()->Initialize(iCmdShow)) return false; //Enter the main message loop while(TRUE) { if(PeekMessage(&msg, NULL, 0,0,PM_REMOVE)) { //Process the message if(msg.message==WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } else { //Make sure the game engine isn't sleeping if(!GameEngine::GetEngine()->GetSleep()) { //Check the tick count to see if a game cycle has elapsed iTickCount=GetTickCount(); if(iTickCount> iTickTrigger) { iTickTrigger=iTickCount+GameEngine::GetEngine()->GetFrameDelay(); GameCycle(); } } } } return (int)msg.wParam; } //End the game GameEnd(); return TRUE; } LRESULT CALLBACK WndProc(HWND hWindow,UINT msg, WPARAM wParam, LPARAM lParam) { //Route all windows messages to the game engine return GameEngine::GetEngine()->HandleEvent(hWindow,msg,wParam,lParam); } GameEngine::GameEngine(HINSTANCE hInstance, LPTSTR szWindowClass, LPTSTR szTitle, WORD wIcon, WORD wSmallIcon, int iWidth, int iHeight) { //Set the member variabled for the game engine m_pGameEngine=this; m_hInstance=hInstance; m_hWindow=NULL; if(lstrlen(szWindowClass)>0) lstrcpy(m_szWindowClass, szWindowClass); if(lstrlen(szTitle)>0) lstrcpy(m_szTitle,szTitle); m_wIcon=wIcon; m_wSmallIcon=wSmallIcon; m_iWidth=iWidth; m_iHeight=iHeight; m_iFrameDelay=50; //20 fps default m_bSleep=TRUE; } GameEngine::~GameEngine() {} BOOL GameEngine::Initialize(int iCmdShow) { WNDCLASSEX wndclass; //Create the window class for the main window wndclass.cbSize=sizeof(wndclass); wndclass.style=CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc=WndProc; wndclass.cbClsExtra=0; wndclass.cbWndExtra=0; wndclass.hInstance=m_hInstance; wndclass.hIcon=LoadIcon(m_hInstance,MAKEINTRESOURCE(GetIcon())); wndclass.hIconSm=LoadIcon(m_hInstance,MAKEINTRESOURCE(GetSmallIcon())); wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1); wndclass.lpszMenuName=NULL; wndclass.lpszClassName=m_szWindowClass; //Register the window class if(!RegisterClassEx(&wndclass)) return false; //Calculate the window size and position based upon game size int iWindowWidth=m_iWidth + GetSystemMetrics(SM_CXFIXEDFRAME) *2, iWindowHeight=m_iHeight+GetSystemMetrics(SM_CYFIXEDFRAME) *2+ GetSystemMetrics(SM_CYCAPTION); if(wndclass.lpszMenuName !=NULL) iWindowHeight += GetSystemMetrics(SM_CYMENU); int iXWindowPos=(GetSystemMetrics(SM_CXSCREEN)-iWindowWidth) / 2, iYWindowPos=(GetSystemMetrics(SM_CYSCREEN)-iWindowHeight)/ 2; //Create the window m_hWindow=CreateWindow(m_szWindowClass,m_szTitle, WS_POPUPWINDOW | WS_CAPTION | WS_MINIMIZEBOX,iXWindowPos,iYWindowPos,iWindowWidth,iWindowHeight,NULL,NULL,m_hInstance,NULL); if(!m_hWindow) return false; //Show and update the window ShowWindow(m_hWindow,iCmdShow); UpdateWindow(m_hWindow); return TRUE; } LRESULT GameEngine::HandleEvent(HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam) { //Route Windows messages to game member functions switch(msg) { case WM_CREATE: //Set the game window and start game SetWindow(hWindow); GameStart(hWindow); return 0; case WM_ACTIVATE: //Activate/deactivate the game and update the Sleep status if(wParam != WA_INACTIVE) { GameActivate(hWindow); SetSleep(FALSE); } else { GameDeactivate(hWindow); SetSleep(TRUE); } return 0; case WM_PAINT: HDC hDC; PAINTSTRUCT ps; hDC=BeginPaint(hWindow,&ps); //paint the game GamePaint(hDC); EndPaint(hWindow,&ps); return 0; case WM_DESTROY: //End the game and exit the application GameEnd(); PostQuitMessage(0); return 0; } return DefWindowProc(hWindow,msg,wParam,lParam); }
FirstGame.hCode:#include "FirstGame.h" BOOL GameInitialize(HINSTANCE hInstance) { //Create the game engine _pGame=new GameEngine(hInstance,TEXT("First Game"),TEXT("First Game"),IDI_ICON,IDI_ICON); if(_pGame==NULL) return false; //Set the frame rate _pGame->SetFrameRate(15); return TRUE; } void GameStart(HWND hWindow) { //Seed the random number generator srand(GetTickCount()); } void GameEnd() { //Cleanup the game engine delete _pGame; } void GameActivate(HWND hWindow) { HDC hDC; RECT rect; //Draw activiation text on game screen GetClientRect(hWindow,&rect); hDC=GetDC(hWindow); DrawText(hDC,TEXT("ACTIVATED!"),-1,&rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER); ReleaseDC(hWindow,hDC); } void GameDeactivate(HWND hWindow) { HDC hDC; RECT rect; //Draw deactiviation text on game screen GetClientRect(hWindow,&rect); hDC=GetDC(hWindow); DrawText(hDC,TEXT("DEACTIVATED!"),-1,&rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER); ReleaseDC(hWindow,hDC); } void GamePaint(HDC hDC) {} void GameCycle() { HDC hDC; HWND hWindow = _pGame->GetWindow(); //Draw the skeleton icon at random positions on the game screen hDC=GetDC(hWindow); DrawIcon(hDC, rand() % _pGame->GetWidth(), rand() % _pGame->GetHeight(),(HICON)(WORD)GetClassLong(hWindow,GCL_HICON)); ReleaseDC(hWindow,hDC); }
Code:#pragma once #include <windows.h> #include "resource.h" #include "GameEngine.h" GameEngine* _pGame;



LinkBack URL
About LinkBacks



I used to be an adventurer like you... then I took an arrow to the knee.