クラス継承

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
lulu

クラス継承

#1

投稿記事 by lulu » 14年前

コード:


//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)' : は抽象型です
上記のソースコードはゲームの遷移のコードの一部なのですが、VC++2010のコンパイルエラーC2259の”抽象クラスはインスタンス化できません”というのが出てきます

純粋仮想関数はちゃんとオーバーライドしているはずなのですが何がいけないのでしょうか?
よろしければ教えて頂きたいと思います

hoge

Re: クラス継承

#2

投稿記事 by hoge » 14年前

MoveToStateの引数の型が違うのでオーバーライドになっていません。
引数の型が基底クラスの方ではScene::ProcessingStateであるのに対し
派生クラスの方ではMainLoop::ProcessingStateになっています。

閉鎖

“C言語何でも質問掲示板” へ戻る