ページ 11

「メニュー画面の作り方」でエラー

Posted: 2013年3月06日(水) 14:21
by pope
こちらのサイトの、新ゲームプログラミングの館に掲載されている、メニュー画面の作り方を参考に(というか書き方以外そのまま)骨格を作ってみたところ、エラーが発生してしまいました。
元のソースと見比べたり、暫く格闘してみたのですが、わかりそうにないので質問させて下さい。

開発環境はVisualStudio2010Pro、DXライブラリ利用、使用言語はC++です。
プログラミングの経験は2年程になります。C++は初心者です。
中身は掲載されているコードにfps制御をつけただけなのですが、命名等を自分の書きやすい様に改変してしまったため、見づらい箇所があったら申し訳ありません。

コード:

// scenemanager.cpp
#include "DxLib.h"
#include "scenemanager.h"
#include "start.h"
#include "game.h"
#include "config.h"


SceneManager::SceneManager()
	: nextScene(None) {
	scene = (BaseScene*) new Start(this);
}

void SceneManager::initialize() {
	scene->initialize();
}
void SceneManager::finalize() {
	scene->finalize();
}

void SceneManager::update() {
	if(nextScene != None) {
		scene->finalize();
		delete scene;
		switch(nextScene) {
		case Start:
			scene = (BaseScene*) new Start(this);
			break;
		case Game:
			scene = (BaseScene*) new Game(this);
			break;
		case Config:
			scene = (BaseScene*) new Config(this);

		}
		this->nextScene = None;
		scene->initialize();
	}
	scene->update();
}


void SceneManager::draw(){
    scene->draw();
}

void SceneManager::changeScene(eScene nextScene){
    this->nextScene = nextScene;
}
ここが実際にエラーを吐いている箇所です。SceneManagerクラスのソースファイル内で、scene = (BaseScene*) new Game(this);の様にインスタンスを生成しようとすると、Gameの部分が構文エラーになってしまいます。

# 1> scenemanager.cpp
# 1>e:\***\samplegame2\samplegame2\scenemanager.cpp(10): error C2061: 構文エラー : 識別子 'Start'
# 1>e:\***\samplegame2\samplegame2\scenemanager.cpp(26): error C2061: 構文エラー : 識別子 'Start'
# 1>e:\***\samplegame2\samplegame2\scenemanager.cpp(29): error C2061: 構文エラー : 識別子 'Game'
# 1>e:\***\samplegame2\samplegame2\scenemanager.cpp(32): error C2061: 構文エラー : 識別子 'Config'

また、オンマウス時の警告として、

# <error-type>::<error-type>(const <error-type>&)
# <error-type>::<error-type>()
#
# Error: 型指定子が必要です

と表示されます。
もしかしたら些細なミスかもしれませんが、力を貸してもらえたら嬉しいです。

全て書くと長くなってしまうのと、何処が直接エラーに繋がっているか分からないため、プロジェクトごとをアップロードしておきます。手間になってしまいますが、申し訳ありません。
ttp://ux.getuploader.com/pope/download/33/SampleGame2.zip

Re: 「メニュー画面の作り方」でエラー

Posted: 2013年3月06日(水) 14:54
by softya(ソフト屋)
enumでの 識別子とクラス名が被っているのが原因です。

Re: 「メニュー画面の作り方」でエラー

Posted: 2013年3月06日(水) 16:51
by pope
ああ!なるほどです…。
普段列挙型を使わないので名前の重複を全然気にしてませんでした。
しっかり考えて書いていくよう気をつけます。
ありがとうございました。

Re: 「メニュー画面の作り方」でエラー

Posted: 2013年3月06日(水) 22:48
by Dixq (管理人)
館では以下のように書いていると思います。

コード:

typedef enum {
    eScene_Menu,    //メニュー画面
    eScene_Game,    //ゲーム画面
    eScene_Config,  //設定画面
} eScene ;
enumは先頭にeを付けることで他と区別することができますよ。

Re: 「メニュー画面の作り方」でエラー

Posted: 2013年3月06日(水) 23:00
by pope
サンプルプロジェクトを見ながら勝手な命名規則でコーディングしてしまっていたので、今回のようなミスが出てしまいました…。
仰るとおり、列挙型にはeを先頭につけるようにします。
講座も含め、回答ありがとうございました。