以下课程Game
是如何抽象的?我如何使它具体化,以便我可以创建它的实例?
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()
{
}
P.S。任何解释都会有所帮助,因为我不是面向对象编程方面的专家。
以下是错误消息以及其他一些内容:
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 ==========
答案 0 :(得分: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