2011-12-14 22 views
2

以下類別Game是如何抽象的?我如何使它具體化,以便我可以創建它的一個實例?爲什麼這個類沒有聲明任何純粹的虛擬成員函數abstract?

game.h

#include <JApp.h> 
#include <JGE.h> 

class Game: public JApp 
{  
private: 
    JGE* Engine; 
    int x, y, x2, y2; 
public: 
    Game(JGE *engine); 
    virtual ~Game(); 
    virtual void Create(); 
    virtual void Destroy(); 
    virtual void Update(); 
    virtual void Render(); 
}; 

的main.cpp

//Other headers 
#include "game.h" 
int main(void) 
{ 
    JGE* engine = NULL; 
    SetupCallbacks(); 
    engine = JGE::GetInstance(); 
    engine->printf("Starting Game!"); 
    Game* g = new Game(engine); // Error 'Game is an abstract type 
    engine->SetApp(g); 
    engine->Run(); 
    engine->Destroy(); 

    sceKernelExitGame(); 
} 

Game::Game(JGE* engine) : JApp(engine) 
{ 
    Engine = engine; 
    x = 0; 
    x2 = 100; 
    y = 0; 
    y2 = 100; 
} 
void Game::Update() 
{ 
    if (this->Engine->GetButtonClick(PSP_CTRL_UP)) 
    { 
     x2 += 1; 
     y2 += 1; 

    } 
    else if(this->Engine->GetButtonClick(PSP_CTRL_DOWN)) 
    { 

     y2 += 10; 
     y += 10; 
    } 
} 
void Game::Create() 
{  
} 
void Game::Render() 
{ 
    JRenderer* renderer = JRenderer::GetInstance(); 
    renderer->DrawLine(x, y, x2, y2, ARGB(0, 0, 0, 255)); 
} 
Game::~Game() 
{  
} 
void Game::Destroy() 
{ 
} 

附:任何解釋都會有幫助,因爲我不是面向對象編程方面的專家。

以下是錯誤消息連同一些其他的東西:

1>------ Build started: Project: PSP Pong, Configuration: Debug Win32 ------ 
1> psp-g++ -I. -Ic:/pspsdk/psp/sdk/include -O2 -G0 -Wall -I. -Ic:/pspsdk/psp/sdk/include -O2 -G0 -Wall -fno-exceptions -fno-rtti -D_PSP_FW_VERSION=150 -c -o main.o main.cpp 
1> main.cpp: In function 'int main()': 
1>main.cpp(57): error : cannot allocate an object of abstract type 'Game' 
1> game.h (5) : note: because the following virtual functions are pure within 'Game': 
1> c:/pspsdk/psp/sdk/include/JApp.h (78) : note: virtual void JApp::Pause() 
1> c:/pspsdk/psp/sdk/include/JApp.h (84) : note: virtual void JApp::Resume() 
1> main.cpp: In constructor 'Game::Game(JGE*)': 
1>main.cpp(66): error : no matching function for call to 'JApp::JApp(JGE*&)' 
1> c:/pspsdk/psp/sdk/include/JApp.h (26) : note: candidates are: JApp::JApp() 
1> c:/pspsdk/psp/sdk/include/JApp.h (22) : note:     JApp::JApp(const JApp&) 
1> c:\pspsdk\bin\make: *** [main.o] Error 1 
1> Press any key to continue . . . 
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.MakeFile.Targets(38,5): error MSB3073: The command "c:\pspsdk\bin\vsmake.bat" exited with code -1. 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 
+1

'JApp'可能有,你沒有覆蓋一些純虛函數。 –

+0

也許在JApp中有一些東西讓它變得抽象? – Shahbaz

+0

JApp是抽象的嗎?你是否覆蓋了所有的純虛函數? –

回答

8

JApp有您必須在類中實現純虛函數。由於你沒有實施它們,你的班級是不完整的。

示例來說明這個問題:

struct B 
{ 
    // this function is pure-virtual and 
    // must be implemented in order to instantiate 
    virtual void fn() = 0; 
}; 

struct C : public B 
{ 
    // missing implementation of fn(). 
    // as of now, this class is abstract because fn() 
    // has no definition. 
}; 

... 

// try to instantiate... 
C myobj;// this line produces error C2259: 'C' : cannot instantiate abstract class 
+1

雖然這會導致鏈接器錯誤,而不是編譯器錯誤。 –

+4

@OliCharlesworth,不,它會導致編譯器錯誤。 –

+0

我假設你正在討論定義函數。如果你在談論沒有在課堂上聲明所有必要的重寫,那麼我同意。 –

相關問題