マップとキャラの当たり判定

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

マップとキャラの当たり判定

#1

投稿記事 by さい » 10年前

マップのデータを構造体で扱い、当たり判定のクラス(MaphitColliision)で構造対のhファイルを宣言し
当たり判定の処理を int isMapPlayerhit 関数に書いているのですが、以下のようなエラーが出てしまいます。。。
原因がわからないので、教えていただいてもよろしいでしょうか?

1>c:\users\test\downloads\passer\gameprog\maphitcollision.h(6): error C2143: 構文エラー : ';' が '<クラスヘッド>' の前にありません。
1>c:\users\test\downloads\passer\gameprog\maphitcollision.cpp(11): error C2143: 構文エラー : ',' が '==' の前にありません


-MaphitCollision.h-

コード:


#pragma once

#include "Mapdata.h"

class MaphitCollision
{
public:
//	MaphitCollision();

	int isMapPlayerHit();
};

-MaphitCollision.cpp-

コード:


#include "MaphitCollision.h"
#include "DxLib.h"
/*
MaphitCollision::MaphitCollision()
{

}*/

int MaphitCollision::isMapPlayerHit()
{
	if(Mapdata hantei1[120][120] == 1){
		printfDx("fdsf");
	}
}



-Mapdata.h-

コード:


#pragma once

#include "Globals.h"

struct Mapdata
{
	int width;
	int height;
	int MapChip_Size;
};

Mapdata hantei1[120][120] = 
{
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },

		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },

		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
}


アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: マップとキャラの当たり判定

#2

投稿記事 by usao » 10年前

とりあえず ぱっと見,一番最後の行に ; が無い模様.

さい

Re: マップとキャラの当たり判定

#3

投稿記事 by さい » 10年前

プログラマーさん
;抜けていました;;ありがとうございます。
一つ目のエラーは消えました。

自分でもいろいろ試しているのですが、二つ目のエラーが中々取れません。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: マップとキャラの当たり判定

#4

投稿記事 by みけCAT » 10年前

さい さんが書きました:

コード:

int MaphitCollision::isMapPlayerHit()
{
	if(Mapdata hantei1[120][120] == 1){
		printfDx("fdsf");
	}
}
エラーには関係無さそうですが、ここでは配列の確保された領域の外にアクセスしており、危険だと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: マップとキャラの当たり判定

#5

投稿記事 by みけCAT » 10年前

さい さんが書きました:

コード:

int MaphitCollision::isMapPlayerHit()
{
	if(Mapdata hantei1[120][120] == 1){
		printfDx("fdsf");
	}
}
if文の小カッコ内の最初のトークン"Mapdata"が蛇足ですね。
このトークンを消し、添字を適切なものに変えてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

さい

Re: マップとキャラの当たり判定

#6

投稿記事 by さい » 10年前

-Globals.cpp-

コード:


const int MAP_NUM = 3;
const int MAP_WIDTH = 120;
const int MAP_HEIGHT = 30;
const int MapChip_Size = 32;

-mapdata.h-

コード:


struct Mapdata
{
	int width;
	int height;
	int data[MAP_WIDTH][MAP_HEIGHT];//追加
};

Mapdata hantei1[MAP_NUM] = 
{
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },

		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },

		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
};

-MapHitCollision.cpp-

コード:


int MapHitCollision::isMapPlayerHit()
{
	if(hantei1[MAP_NUM].data[MAP_WIDTH][MAP_HEIGHT] == 1){ //MAP_NUMが現在のマップ状況で、MAP_WIDTH MAP_HEIGHT がマップの縦の大きさと横の大きさ
		printfDx("fdsfd");
	}
}

1>c:\users\test\downloads\passer\gameprog\mapdata.h(9): error C2057: 定数式が必要です。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(9): error C2057: 定数式が必要です。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(9): error C2087: 'data' : 添字がありません。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(9): warning C4200: 非標準の拡張機能が使用されています : 構造体または共用体中にサイズが 0 の配列があります。
1> UDT にサイズが 0 の配列が含まれているときに、copy-ctor または copy-assignment オペレーターを生成することはできません。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(12): error C2057: 定数式が必要です。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(12): error C2466: サイズが 0 の配列を割り当てまたは宣言しようとしました。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(12): error C2233: 'hantei1' : サイズが 0 の配列を含むオブジェクトの配列は無効です。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========


添え字などの訂正を行いましたが、このようなエラーが追加ではきだされてしまいました。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: マップとキャラの当たり判定

#7

投稿記事 by みけCAT » 10年前

とりあえずMapdataの宣言と初期化が合っていないので、

mapdata.hを

コード:

struct Mapdata
{
	int width;
	int height;
	int data[MAP_WIDTH][MAP_HEIGHT];//追加
};

Mapdata hantei1[MAP_NUM] = {
	// Mapdataの配列のデータ
	{
		// Mapdataのデータ
		30, 15, {
			// Mapdata内のdataメンバのデータ
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },

			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },

			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 }
		}
	}
};
MapHitCollision.cppを

コード:

int MapHitCollision::isMapPlayerHit()
{
	if(hantei1[0].data[0][0] == 1){
		printfDx("fdsfd");
	}
}
としてみてください。(必要な#includeを補ってください)
これでコンパイルが通らなければ、必要そうなソースコードを#includeを含めて提示してください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

さい

Re: マップとキャラの当たり判定

#8

投稿記事 by さい » 10年前

先ほどと同じエラーが出てしまいます。

インクルードの方は省略して書いてしまいました。すみません
以後気をつけます。

インクルードの内容も、最初のソースコードのとおりです。

さい

Re: マップとキャラの当たり判定

#9

投稿記事 by さい » 10年前

mapdata.h

コード:


#pragma once

#include "Globals.h"

struct Mapdata
{
	int width;
	int height;
	int data[MAP_WIDTH][MAP_HEIGHT];
};

Mapdata hantei1[MAP_NUM] = 
{
	{
		30, 15, 
		{

			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },

			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },

			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
			{ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
		}
	}
};

-maphitcollision.h-

コード:


#pragma once

#include "Mapdata.h"

class MapHitCollision
{
public:
	MapHitCollision();

	int isMapPlayerHit();
};


-maphitcollision.cpp-

コード:


#include "MapHitCollision.h"
#include "DxLib.h"

MapHitCollision::MapHitCollision()
{

}

int MapHitCollision::isMapPlayerHit()
{
	if(hantei1[0].data[0][0] == 1){
		printfDx("fdsfd");
	}
}


-gloabls.h-

コード:


#pragma once

#include "StageManeger.h"
#include "Stage1.h"
#include "Stage2.h"
#include "Stage3.h"
#include "GameScene.h"	
#include "TitleScene.h"
#include "PlayScene.h"
#include "GameOverScene.h"

extern StageManeger *currentStage;
extern Stage1 *st1;
extern Stage2 *st2;
extern Stage3 *st3;
extern GameScene *currentScene;
extern TitleScene *titleScene;
extern PlayScene *playScene;
extern GameOverScene *gameoverScene;

extern const int kSpeed;
extern const int SCREEN_WIDTH;
extern const int SCREEN_HEIGHT;
extern const int hn_speed;
extern const int MAP_NUM;
extern const int MAP_WIDTH;
extern const int MAP_HEIGHT;
extern const int MapChip_Size;


-globals.cpp-

コード:


#include "Globals.h"

StageManeger *currentStage;
Stage1 *st1;
Stage2 *st2;
Stage3 *st3;
GameScene *currentScene;
TitleScene *titleScene;
PlayScene *playScene;
GameOverScene *gameoverScene;

//変数のグローバル化
const int kSpeed = 3;
const int hn_speed = 17;
const int shot_max = 100;
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int MAP_NUM = 3;
const int MAP_WIDTH = 120;
const int MAP_HEIGHT = 30;
const int MapChip_Size = 32;

これが、当たり判定に必要なそーすこーどです

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: マップとキャラの当たり判定

#10

投稿記事 by みけCAT » 10年前

定数をglobals.cppではなくGlobals.hに書いてください。
そうしないと(この場合)コンパイラに配列の要素数が伝わらず、エラーになります。

-Globals.h-

コード:

#pragma once

#include "StageManeger.h"
#include "Stage1.h"
#include "Stage2.h"
#include "Stage3.h"
#include "GameScene.h"	
#include "TitleScene.h"
#include "PlayScene.h"
#include "GameOverScene.h"

extern StageManeger *currentStage;
extern Stage1 *st1;
extern Stage2 *st2;
extern Stage3 *st3;
extern GameScene *currentScene;
extern TitleScene *titleScene;
extern PlayScene *playScene;
extern GameOverScene *gameoverScene;

const int kSpeed = 3;
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int hn_speed = 17;
const int MAP_NUM = 3;
const int MAP_WIDTH = 120;
const int MAP_HEIGHT = 30;
const int MapChip_Size = 32;
-globals.cpp-

コード:

#include "Globals.h"

StageManeger *currentStage;
Stage1 *st1;
Stage2 *st2;
Stage3 *st3;
GameScene *currentScene;
TitleScene *titleScene;
PlayScene *playScene;
GameOverScene *gameoverScene;

//変数のグローバル化
const int shot_max = 100;
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

さい

Re: マップとキャラの当たり判定

#11

投稿記事 by さい » 10年前

おっしゃったとおり実行してみると、今までは普通にうごいていたのに
急に見たことないエラーが続出しました。
普通、プログラムの赤色の下線が引かれ、エラーの警告が出ると思いますが
それがなく、実行したときのみ、結果出力時のみエラーが出力されるという現象が起こりました。


1>c:\users\test\downloads\passer\gameprog\mapdata.h(9): error C2065: 'MAP_WIDTH' : 定義されていない識別子です。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(9): error C2065: 'MAP_HEIGHT' : 定義されていない識別子です。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(12): error C2065: 'MAP_NUM' : 定義されていない識別子です。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(18): error C2078: 初期化子の数が多すぎます。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(22): fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します。
1> TitleScene.cpp
1>c:\users\test\downloads\passer\gameprog\mapdata.h(9): error C2065: 'MAP_WIDTH' : 定義されていない識別子です。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(9): error C2065: 'MAP_HEIGHT' : 定義されていない識別子です。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(12): error C2065: 'MAP_NUM' : 定義されていない識別子です。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(18): error C2078: 初期化子の数が多すぎます。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(22): fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します。
1> Stage3.cpp
1>c:\users\test\downloads\passer\gameprog\stage1.h(6): error C2504: 'StageManeger' : 定義されていない基本クラスが宣言されています。
1>c:\users\test\downloads\passer\gameprog\stage1.h(14): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\stage1.h(14): error C2143: 構文エラー : ',' が '&' の前にありません。
1>c:\users\test\downloads\passer\gameprog\stage1.h(15): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\stage1.h(15): error C2143: 構文エラー : ',' が '&' の前にありません。
1>c:\users\test\downloads\passer\gameprog\stage2.h(8): error C2504: 'StageManeger' : 定義されていない基本クラスが宣言されています。
1>c:\users\test\downloads\passer\gameprog\player.h(9): warning C4099: 'Player' : タイプ名は最初 'struct' として使われていましたが 'class' として使われています。
1> c:\users\test\downloads\passer\gameprog\stage2.h(5) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\enemy.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\enemy.h(8): warning C4099: 'Enemy' : タイプ名は最初 'struct' として使われていましたが 'class' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(6) : 'Enemy' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\globals.h(12): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\test\downloads\passer\gameprog\globals.h(12): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(12): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(15): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\test\downloads\passer\gameprog\globals.h(15): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(15): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\stagemaneger.h(6): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage3.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage3.cpp(18): error C2440: '=' : 'Stage1 *' から 'int *' に変換できません。
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1> Stage2.cpp
1>c:\users\test\downloads\passer\gameprog\stage1.h(6): error C2504: 'StageManeger' : 定義されていない基本クラスが宣言されています。
1>c:\users\test\downloads\passer\gameprog\stage1.h(14): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\stage1.h(14): error C2143: 構文エラー : ',' が '&' の前にありません。
1>c:\users\test\downloads\passer\gameprog\stage1.h(15): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\stage1.h(15): error C2143: 構文エラー : ',' が '&' の前にありません。
1>c:\users\test\downloads\passer\gameprog\stage3.h(8): error C2504: 'StageManeger' : 定義されていない基本クラスが宣言されています。
1>c:\users\test\downloads\passer\gameprog\player.h(9): warning C4099: 'Player' : タイプ名は最初 'struct' として使われていましたが 'class' として使われています。
1> c:\users\test\downloads\passer\gameprog\stage3.h(5) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\enemy.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\enemy.h(8): warning C4099: 'Enemy' : タイプ名は最初 'struct' として使われていましたが 'class' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(6) : 'Enemy' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\globals.h(12): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\test\downloads\passer\gameprog\globals.h(12): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(12): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(14): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\test\downloads\passer\gameprog\globals.h(14): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(14): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\stagemaneger.h(6): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage2.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage2.cpp(18): error C2440: '=' : 'Stage3 *' から 'int *' に変換できません。
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1> Stage1.cpp
1>c:\users\test\downloads\passer\gameprog\stage2.h(8): error C2504: 'StageManeger' : 定義されていない基本クラスが宣言されています。
1>c:\users\test\downloads\passer\gameprog\stage3.h(8): error C2504: 'StageManeger' : 定義されていない基本クラスが宣言されています。
1>c:\users\test\downloads\passer\gameprog\player.h(9): warning C4099: 'Player' : タイプ名は最初 'struct' として使われていましたが 'class' として使われています。
1> c:\users\test\downloads\passer\gameprog\stage2.h(5) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\enemy.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\enemy.h(8): warning C4099: 'Enemy' : タイプ名は最初 'struct' として使われていましたが 'class' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(6) : 'Enemy' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\globals.h(12): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\test\downloads\passer\gameprog\globals.h(12): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(12): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(13): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\test\downloads\passer\gameprog\globals.h(13): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(13): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\stagemaneger.h(6): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage1.cpp(19): error C2440: '=' : 'Stage2 *' から 'int *' に変換できません。
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1> Player.cpp
1>c:\users\test\downloads\passer\gameprog\mapdata.h(9): error C2065: 'MAP_WIDTH' : 定義されていない識別子です。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(9): error C2065: 'MAP_HEIGHT' : 定義されていない識別子です。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(12): error C2065: 'MAP_NUM' : 定義されていない識別子です。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(18): error C2078: 初期化子の数が多すぎます。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(22): fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します。
1> PlayScene.cpp
1>c:\users\test\downloads\passer\gameprog\enemy.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\enemy.h(8): warning C4099: 'Enemy' : タイプ名は最初 'struct' として使われていましたが 'class' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(6) : 'Enemy' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage2.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage2.h(8): error C2504: 'StageManeger' : 定義されていない基本クラスが宣言されています。
1>c:\users\test\downloads\passer\gameprog\stage3.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage3.h(8): error C2504: 'StageManeger' : 定義されていない基本クラスが宣言されています。
1>c:\users\test\downloads\passer\gameprog\globals.h(12): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\test\downloads\passer\gameprog\globals.h(12): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(12): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(13): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\test\downloads\passer\gameprog\globals.h(13): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(13): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(18): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\test\downloads\passer\gameprog\globals.h(18): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(18): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\stagemaneger.h(6): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\playscene.cpp(11): error C2061: 構文エラー : 識別子 'Stage1'
1>c:\users\test\downloads\passer\gameprog\playscene.cpp(29): error C2227: '->draw' : 左側がクラス、構造体、共用体、ジェネリック型へのポインターではありません。
1> 型は 'int *' です。
1>c:\users\test\downloads\passer\gameprog\playscene.cpp(40): error C2227: '->next_stage' : 左側がクラス、構造体、共用体、ジェネリック型へのポインターではありません。
1> 型は 'int *' です。
1> Globals.cpp
1>c:\users\test\downloads\passer\gameprog\mapdata.h(9): error C2065: 'MAP_WIDTH' : 定義されていない識別子です。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(9): error C2065: 'MAP_HEIGHT' : 定義されていない識別子です。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(12): error C2065: 'MAP_NUM' : 定義されていない識別子です。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(18): error C2078: 初期化子の数が多すぎます。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(22): fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します。
1> GameOverScene.cpp
1>c:\users\test\downloads\passer\gameprog\mapdata.h(9): error C2065: 'MAP_WIDTH' : 定義されていない識別子です。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(9): error C2065: 'MAP_HEIGHT' : 定義されていない識別子です。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(12): error C2065: 'MAP_NUM' : 定義されていない識別子です。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(18): error C2078: 初期化子の数が多すぎます。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(22): fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します。
1> Enemy.cpp
1>c:\users\test\downloads\passer\gameprog\mapdata.h(9): error C2065: 'MAP_WIDTH' : 定義されていない識別子です。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(9): error C2065: 'MAP_HEIGHT' : 定義されていない識別子です。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(12): error C2065: 'MAP_NUM' : 定義されていない識別子です。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(18): error C2078: 初期化子の数が多すぎます。
1>c:\users\test\downloads\passer\gameprog\mapdata.h(22): fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します。
1> コードを生成中...
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: マップとキャラの当たり判定

#12

投稿記事 by みけCAT » 10年前

とりあえず、定数の定義を#includeの前に持ってくるとどうなりますか?

-Globals.h-

コード:

#pragma once

const int kSpeed = 3;
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int hn_speed = 17;
const int MAP_NUM = 3;
const int MAP_WIDTH = 120;
const int MAP_HEIGHT = 30;
const int MapChip_Size = 32;

#include "StageManeger.h"
#include "Stage1.h"
#include "Stage2.h"
#include "Stage3.h"
#include "GameScene.h"	
#include "TitleScene.h"
#include "PlayScene.h"
#include "GameOverScene.h"

extern StageManeger *currentStage;
extern Stage1 *st1;
extern Stage2 *st2;
extern Stage3 *st3;
extern GameScene *currentScene;
extern TitleScene *titleScene;
extern PlayScene *playScene;
extern GameOverScene *gameoverScene;
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

さい

Re: マップとキャラの当たり判定

#13

投稿記事 by さい » 10年前

mapdataのエラーが消えました。

ファイルの展開をすることと、これらの定数を定義するのでは、直接的な関連はないので
インクルードの前に定義し、mapdataでglobalsをインクルードした際に、処理が正常に通った。

ということでしょうか?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: マップとキャラの当たり判定

#14

投稿記事 by みけCAT » 10年前

さい さんが書きました:ファイルの展開をすることと、これらの定数を定義するのでは、直接的な関連はないので
インクルードの前に定義し、mapdataでglobalsをインクルードした際に、処理が正常に通った。

ということでしょうか?
申し訳ないですが、意味がよくわかりません。

自分の予想では、Stage*.hまたは*Scene.hのどれかでmapdata.hをincludeしたため、
必要な定数が定義される前にMapdataなどを定義しようとしてしまい、エラーになったのだと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

さい

Re: マップとキャラの当たり判定

#15

投稿記事 by さい » 10年前

なるほど、、、わかりました、ありがとうございます。

他のエラーなどもそういったことが原因となっているのでしょうか?
もしくは、また別の原因が考えられるのでしょうか?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: マップとキャラの当たり判定

#16

投稿記事 by みけCAT » 10年前

さい さんが書きました:他のエラーなどもそういったことが原因となっているのでしょうか?
もしくは、また別の原因が考えられるのでしょうか?
「他のエラー」には何がありますか?
現状のソースコードとエラーメッセージを提示してください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

さい

Re: マップとキャラの当たり判定

#17

投稿記事 by さい » 10年前

そうですね。すみません。

以下がエラー一覧と、コードです。


1>------ ビルド開始: プロジェクト: GameProg, 構成: Debug Win32 ------
1> Stage3.cpp
1>c:\users\test\downloads\passer\gameprog\enemy.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\enemy.h(8): warning C4099: 'Enemy' : タイプ名は最初 'struct' として使われていましたが 'class' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(6) : 'Enemy' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage1.h(6): error C2504: 'StageManeger' : 定義されていない基本クラスが宣言されています。
1>c:\users\test\downloads\passer\gameprog\stage2.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage2.h(8): error C2504: 'StageManeger' : 定義されていない基本クラスが宣言されています。
1>c:\users\test\downloads\passer\gameprog\globals.h(26): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\test\downloads\passer\gameprog\globals.h(26): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(26): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(29): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\test\downloads\passer\gameprog\globals.h(29): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(29): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\stagemaneger.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage3.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage3.cpp(18): error C2440: '=' : 'Stage1 *' から 'int *' に変換できません。
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1> Stage2.cpp
1>c:\users\test\downloads\passer\gameprog\enemy.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\enemy.h(8): warning C4099: 'Enemy' : タイプ名は最初 'struct' として使われていましたが 'class' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(6) : 'Enemy' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage1.h(6): error C2504: 'StageManeger' : 定義されていない基本クラスが宣言されています。
1>c:\users\test\downloads\passer\gameprog\stage3.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage3.h(8): error C2504: 'StageManeger' : 定義されていない基本クラスが宣言されています。
1>c:\users\test\downloads\passer\gameprog\globals.h(26): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\test\downloads\passer\gameprog\globals.h(26): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(26): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(28): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\test\downloads\passer\gameprog\globals.h(28): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(28): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\stagemaneger.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage2.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage2.cpp(18): error C2440: '=' : 'Stage3 *' から 'int *' に変換できません。
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1> Stage1.cpp
1>c:\users\test\downloads\passer\gameprog\enemy.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\enemy.h(8): warning C4099: 'Enemy' : タイプ名は最初 'struct' として使われていましたが 'class' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(6) : 'Enemy' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage2.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage2.h(8): error C2504: 'StageManeger' : 定義されていない基本クラスが宣言されています。
1>c:\users\test\downloads\passer\gameprog\stage3.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage3.h(8): error C2504: 'StageManeger' : 定義されていない基本クラスが宣言されています。
1>c:\users\test\downloads\passer\gameprog\globals.h(26): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\test\downloads\passer\gameprog\globals.h(26): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(26): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(27): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\test\downloads\passer\gameprog\globals.h(27): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(27): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\stagemaneger.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage1.cpp(20): error C2440: '=' : 'Stage2 *' から 'int *' に変換できません。
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1> PlayScene.cpp
1>c:\users\test\downloads\passer\gameprog\enemy.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\enemy.h(8): warning C4099: 'Enemy' : タイプ名は最初 'struct' として使われていましたが 'class' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(6) : 'Enemy' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage2.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage2.h(8): error C2504: 'StageManeger' : 定義されていない基本クラスが宣言されています。
1>c:\users\test\downloads\passer\gameprog\stage3.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage3.h(8): error C2504: 'StageManeger' : 定義されていない基本クラスが宣言されています。
1>c:\users\test\downloads\passer\gameprog\globals.h(24): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\test\downloads\passer\gameprog\globals.h(24): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(24): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(26): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\test\downloads\passer\gameprog\globals.h(26): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(26): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(27): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\test\downloads\passer\gameprog\globals.h(27): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(27): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\stagemaneger.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\playscene.cpp(11): error C2061: 構文エラー : 識別子 'Stage1'
1>c:\users\test\downloads\passer\gameprog\playscene.cpp(29): error C2227: '->draw' : 左側がクラス、構造体、共用体、ジェネリック型へのポインターではありません。
1> 型は 'int *' です。
1>c:\users\test\downloads\passer\gameprog\playscene.cpp(40): error C2227: '->next_stage' : 左側がクラス、構造体、共用体、ジェネリック型へのポインターではありません。
1> 型は 'int *' です。
1> コードを生成中...
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========




Globals.h

コード:


#pragma once

const int kSpeed = 3;
const int hn_speed = 17;
const int shot_max = 100;
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int MAP_NUM = 3;
const int MAP_WIDTH = 120;
const int MAP_HEIGHT = 30;
const int MapChip_Size = 32;

#include "GameScene.h"	
#include "TitleScene.h"
#include "PlayScene.h"
#include "GameOverScene.h"
#include "StageManeger.h"
#include "Stage1.h"
#include "Stage2.h"
#include "Stage3.h"

extern GameScene *currentScene;
extern TitleScene *titleScene;
extern PlayScene *playScene;
extern GameOverScene *gameoverScene;
extern StageManeger *currentStage;
extern Stage1 *st1;
extern Stage2 *st2;
extern Stage3 *st3;


MapHitCollision.h

コード:


#pragma once

#include "Mapdata.h"

class MapHitCollision
{
public:
	MapHitCollision();

	void Map_Draw();
	void isMapPlayerHit();
};

StageManeger.h

コード:


#pragma once

#include "MapHitCollision.h"

struct Player;

class StageManeger
{
public:
	int DrawBase_x, DrawBase_y;

	virtual void draw(const Player& Pl) = 0;
	virtual void next_stage(const Player& Pl) = 0;
};

Stage1.h

コード:


#pragma once

#include "StageManeger.h"

class Stage1 : public StageManeger
{
	int s1_graph;
	int w_graph;
	int wall_x, wall_y;

public:
	Stage1();

	virtual void draw(const Player& Pl);
	virtual void next_stage(const Player& Pl);
};

stage1.cpp

コード:


#include "DxLib.h"
#include "Stage1.h"
#include "Globals.h"

Stage1::Stage1()
	: wall_x(0), wall_y(0)
{
	s1_graph = LoadGraph("passer画像/stage1.floor.png");
	w_graph = LoadGraph("passer画像/よかげ.png");
}

void Stage1::draw(const Player& Pl)
{
	DrawGraph(wall_x - Pl.drawbase_x(), wall_y - Pl.drawbase_y(), s1_graph, FALSE);
}

void Stage1::next_stage(const Player& Pl)
{
	if(Pl.pos_x() >= 640){
		currentStage = st2;
	}
}

PlayScene.h

コード:


#pragma once

#include "GameScene.h"
#include "Player.h"
#include "Enemy.h"
#include "Types.h"
#include "Stage1.h"
#include "Stage2.h"
#include "Stage3.h"

class PlayScene : public GameScene //GameSceneのサブクラス
{
	Player *player;
	Enemy *enemy;
	MouseCursor *mouseCursor;

public:
	PlayScene();//PlayScene.cppの呼び出し
	virtual ~PlayScene();//

	virtual void draw();//毎フレームの上書きが可能
	virtual void update(MouseCursor *mouseCursor);
};

PlayScene.cpp

コード:


#include "DxLib.h"
#include "PlayScene.h"
#include "Globals.h"

PlayScene::PlayScene()//PlaySceneで呼び出されている、PlayScene関数の処理定義
{
	player = new Player(Point2D(100, 480));//playerの初期化
	enemy = new Enemy(Point2D(200, 200));
	mouseCursor = new MouseCursor();

	st1 = new Stage1();
	st2 = new Stage2();
	st3 = new Stage3();
	currentStage = st1;
}

PlayScene::~PlayScene()
{
	delete player;
	delete enemy;
	delete mouseCursor;
	delete st1;
	delete st2;
	delete st3;
}

void PlayScene::draw()//PlaySceneで呼び出されているdraw関数の処理定義
{
	currentStage->draw(*player);

	player->draw();//playerクラスのdraw関数を呼び出す
	enemy->draw();

	player->rePoint();
	enemy->rePoint();
}

void PlayScene::update(MouseCursor *mouseCursor)
{	
	currentStage->next_stage(*player);//現在のnext_stage関数を呼び出す

	mouseCursor->move();

	player->move(mouseCursor);
	enemy->move();
	player->shot(mouseCursor);

	player->isInsector(*enemy);
	enemy->isInsector(*player);

	if( CheckHitKey(KEY_INPUT_Q) ){
		currentScene = gameoverScene;
	}
}


アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: マップとキャラの当たり判定

#18

投稿記事 by みけCAT » 10年前

さい さんが書きました:stage1.cpp

コード:


#include "DxLib.h"
#include "Stage1.h"
#include "Globals.h"

Stage1::Stage1()
	: wall_x(0), wall_y(0)
{
	s1_graph = LoadGraph("passer画像/stage1.floor.png");
	w_graph = LoadGraph("passer画像/よかげ.png");
}

void Stage1::draw(const Player& Pl)
{
	DrawGraph(wall_x - Pl.drawbase_x(), wall_y - Pl.drawbase_y(), s1_graph, FALSE);
}

void Stage1::next_stage(const Player& Pl)
{
	if(Pl.pos_x() >= 640){
		currentStage = st2;
	}
}

必要な定数を定義しているGlobals.hより前にStage1.hを#includeしてしまっているのがまずそうです。
Stage1.hはGlobals.hで#includeされているので、3行目の#include "Stage1.h"を消してください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

さい

Re: マップとキャラの当たり判定

#19

投稿記事 by さい » 10年前

なるほど。。すみません、盆ミスには気をつけます。


stage1.cpp stage2.cpp stage3.cpp の #include "globals.h"を消し、実行してみたところ
エラーは以下のようになりました


1>c:\users\test\downloads\passer\gameprog\stage2.h(8): error C2504: 'StageManeger' : 定義されていない基本クラスが宣言されています。
1>c:\users\test\downloads\passer\gameprog\stage3.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\stage3.h(8): error C2504: 'StageManeger' : 定義されていない基本クラスが宣言されています。
1>c:\users\test\downloads\passer\gameprog\globals.h(24): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\test\downloads\passer\gameprog\globals.h(24): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(24): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(26): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\test\downloads\passer\gameprog\globals.h(26): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(26): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(27): error C2143: 構文エラー : ';' が '*' の前にありません。
1>c:\users\test\downloads\passer\gameprog\globals.h(27): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\globals.h(27): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\test\downloads\passer\gameprog\stagemaneger.h(5): warning C4099: 'Player' : タイプ名は最初 'class' として使われていましたが 'struct' として使われています。
1> c:\users\test\downloads\passer\gameprog\player.h(9) : 'Player' の宣言を確認してください。
1>c:\users\test\downloads\passer\gameprog\playscene.cpp(11): error C2061: 構文エラー : 識別子 'Stage1'
1>c:\users\test\downloads\passer\gameprog\playscene.cpp(29): error C2227: '->draw' : 左側がクラス、構造体、共用体、ジェネリック型へのポインターではありません。
1> 型は 'int *' です。
1>c:\users\test\downloads\passer\gameprog\playscene.cpp(40): error C2227: '->next_stage' : 左側がクラス、構造体、共用体、ジェネリック型へのポインターではありません。
1> 型は 'int *' です。
1> コードを生成中...
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: マップとキャラの当たり判定

#20

投稿記事 by みけCAT » 10年前

Globals.hでStageManeger.hを#includeする前に、
それに依存しているStage2.hを#includeするPlayScene.hを#includeしているのがまずそうです。
自分がこのように指摘して1個ずつ潰しても手間がかかりそうなので、
あるクラスの宣言や定義がそのクラスを使用する場所より前に来ないように自分で考えて修正してみてください。
例えば、このような#include関係の図を書くと、現状が整理しやすいかもしれません。

コード:

PlayScene.cpp
├PlayScene.h
│├GameScene.h
││└?
│├Player.h
││└?
│├Enemy.h
││└?
│├Types.h
││└?
│├Stage1.h
││└StageManeger.h
││ └MapHitCollision.h
││  └Mapdata.h
││   └Globals.h
││    ├GameScene.h
││    │└?
││    ├TitleScene.h
││    │└?
││    ├(PlayScene.h)
││    ├GameOverScene.h
││    │└?
││    ├(StageManeger.h)
││    ├(Stage1.h)
││    ├Stage2.h
││    │└?
││    └Stage3.h
││     └?
│├Stage2.h
││└?
│└Stage3.h
│ └?
└(Globals.h)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

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