クラス継承
Posted: 2011年12月13日(火) 21:16
//common.h
class Scene{
public:
//処理状態
enum ProcessingState{
STATE_FINISH, //処理終了
STATE_CONTINUE, //処理継続
};
//コンストラクタ
Scene(){}
//デストラクタ
virtual ~Scene(){}
//シーケンス移動関数
virtual void MoveToState(ProcessingState StatusNum) = 0;
private:
ProcessingState SceneNumber;
};
//main.h
#include "common.h"
class MainLoop : private Scene{
public:
enum ProcessingState{
GAME_TITLE, //ゲームタイトル
GAME_INIT, //ゲーム初期化
GAME_MAIN, //ゲーム本編
GAME_CLEAR, //ゲームクリア
GAME_OVER, //ゲームオーバー
};
//データロード
int LoadModel();
//ゲーム初期化
void GernalInit();
//メインループ
void doMainLoop(bool);
//処理状態
void MoveToState(ProcessingState StatusNum);//オーバーライドしているはず
//デストラクタ
~MainLoop(){}
private:
ProcessingState MainLoopNumber;
};
//main.cpp
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
MainLoop* loop = new MainLoop;//←コンパイルエラーC2259
loop->doMainLoop(TRUE);
delete loop;
return 0;
}
//純粋仮想関数のオーバーライド
/************************************************************************************
*
*シーケンス遷移
*
*************************************************************************************/
void MainLoop::MoveToState(ProcessingState StatusNum){
if(MainLoopNumber != StatusNum){
MainLoopNumber = StatusNum;
}
}
//エラー内容
main.cpp(26): error C2259: 'MainLoop' : 抽象クラスをインスタンス化できません。
1> 次のメンバーが原因です:
1> 'void Scene::MoveToState(Scene::ProcessingState)' : は抽象型です
純粋仮想関数はちゃんとオーバーライドしているはずなのですが何がいけないのでしょうか?
よろしければ教えて頂きたいと思います