コンパイルエラーについて

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

コンパイルエラーについて

#1

投稿記事 by kin » 14年前

windows7 vc++2010 DXライブラリ環境下でゲーム開発をしています

以下のエラーが解決出来ず悩んでいます

コード:

//hero.h

#include "CharacterBase.h" //キャラクターベースヘッダファイル

//主人公クラス::キャラクタークラスを継承
class Hero : public Character{
	public:
		void Move();
		int  load();
};

//GameMain.h

#ifndef ST_GAMEMAIN_H
#define ST_GAMEMAIN_H

#include "SceneBase.h"

namespace ST {//タイトルやデモなどシーケンス遷移関係を名前空間STで囲っている

	class Hero; //ここ

	// ゲームシーン
	class GameMain : public SceneBase {

		public:
		
		//色々と宣言 今回のエラーとは関係ないと思う

		private:
			// ステートメソッド群
			void init( unsigned int dt );	//!< 初期化
			void main( unsigned int dt );	//!< アイドル状態
			void end( unsigned int dt );	//!< 終了

		private:
			void ( GameMain::*stateFunc_ )( unsigned int );	// ステートメソッドポインタ
			StateResult stateResult_;
			unsigned int curComment_;
			Hero* hero;//ここ
	};
}
#endif //ST_GAMEMAIN



//GameMain.cpp


//ゲーム初期化関数
void GameMain::init( unsigned int dt ){
		//キャラ読み込み
		hero->load();	//C2027, C2227
		
		//ゲーム本遍に切り替え
		SetState( &GameMain::main );
	}


//ゲーム本遍
	void GameMain::main( unsigned int dt ){
		//キャラ移動関数、今のところ描画だけ
		hero->Move();//C2027, C2227

	}


エラー内容
error C2027: 認識できない型 'ST::Hero' が使われています。
'ST::Hero' の宣言を確認してください。
error C2227: '->load' : 左側がクラス、構造体、共用体、ジェネリック型へのポインターではありません。
error C2027: 認識できない型 'ST::Hero' が使われています。
'ST::Hero' の宣言を確認してください。
C2227: '->Move' : 左側がクラス、構造体、共用体、ジェネリック型へのポインターではありません。



プログラミングの教本で見たヘッダファイルをインクルードせず、
必要なクラスだけ宣言しポインタを持たせて使用するという方法を実践しようとしてこのエラーが発生しました


ご協力よろしくお願いします

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: コンパイルエラーについて

#2

投稿記事 by h2so5 » 14年前

6行目の class Hero と 21行目の class Hero では名前空間が異なっているのが問題だと思います。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: コンパイルエラーについて

#3

投稿記事 by softya(ソフト屋) » 14年前

気になるところ。
・名前空間は次のようにした方が良いでしょう。後ろのclass Hero;は不要です。

コード:

namespace ST {
	class Hero : public Character{
	    public:
	        void Move();
	        int  load();
	};
}
・heroのインスタンスが生成されていません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

kin

Re: コンパイルエラーについて

#4

投稿記事 by kin » 14年前

Heroクラスをシーケンス遷移の名前空間で囲ってみましたがエラーが出ました
クラスとして認識されていないようです

インスタンスの宣言場所はあっているでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: コンパイルエラーについて

#5

投稿記事 by softya(ソフト屋) » 14年前

>Heroクラスをシーケンス遷移の名前空間で囲ってみましたがエラーが出ました
>クラスとして認識されていないようです

エラーメッセージを添付して下さい。
あと、どうしてクラスとして認識されていないと判断されましたか?

>インスタンスの宣言場所はあっているでしょうか?

提示されているコードでは何処にもインスタンスの生成は行われていませんので答えようが無いです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: コンパイルエラーについて

#6

投稿記事 by beatle » 14年前

どのようなエラーがでるのか,エラーメッセージを「全部正確に」載せて下さい.
それから,改造後のソースコードも載せたほうがいいでしょう.
kinさんの最初の書き込みのエラーメッセージも,重要な情報をkinさんが勝手に削除して貼りつけている気がします.普通,エラーメッセージにはファイル名とか行数などが含まれているはずです.それらの情報も削除せずに全部貼り付けてください.

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: コンパイルエラーについて

#7

投稿記事 by ISLe » 14年前

kin さんが書きました:Heroクラスをシーケンス遷移の名前空間で囲ってみましたがエラーが出ました
クラスとして認識されていないようです
HeroをST名前空間に属するように変更したのだから、Hero → ST::Hero になりますよね。

ところでHeroがST名前空間に属するのはkinさんにとって望ましいことなのでしょうか?

閉鎖

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