ページ 11

#define文法的には間違ってない(多分)のにエラー

Posted: 2019年4月10日(水) 01:17
by TETSUCOM
久々にゲームを作ったのですが、一応完成したのですが
#defineで定義した一部の定数が何故かコンパイルエラーになるので
仕方なく置換機能で数字に変換したら何とかコンパイルが通りました。
文法的には間違ってないと思うのですが。
こういう経験は人生の中で何回かありますよね?もっと良い解決策が
あったら是非、ご教示して頂きたいのですが。よろしくお願いしますm(_ _)m

ソースの一部↓↓↓

コード:

//Enemy.h//////////

#pragma once
#include"DxLib.h"
#include"Battle.h"
#include"RingChara.h"
#include"SE.h"
#include<string.h>

#define  ENEMY_ID_NUM        31//敵全部の数
[b]//#define  5            5 //戦闘敵の数   <<<<<<<<<<<<<ココ!「#define ENEMY_NUM 5」としていた[/b]

#define ENEMY_GROUP_DATA_NUM 20 //グループデータ数

#define PHYSICAL              0 //物理
#define PHYSICAL2             1 //間接物理
#define NOTHING               2 //無
#define FIRE                  3 //火
#define ICE                   4 //氷
#define LIGHTNING             5 //雷

#define AVANT                 0 //前衛
#define BACK                  1 //後衛

#define ENEMY_NOMAL           1 //通常
#define ENEMY_DAMAGE          2 //ダメージ
#define ENEMY_ATTACK          3 //攻撃
#define ENEMY_AFTER_IMAGE     0 //残像
#define ENEMY_NOTHING        -1 //存在しない

#define AFTER_IMAGE_NUM      10 //残像の数

typedef struct
{
	int    id;               //ID
	double max_hp, hp;       //HP
	double str;              //STR
	int    attribute;        //属性
	double def;              //DEF
	char   g_file_name[256]; //グラフィックファイルネーム
	double x, y;             //座標
	double x0, y0, xp, yp;   //座標補正
	int    h_graph;          //グラフィックハンドル
	int    size_x, size_y;   //グラフィックサイズ
	int    state;            //状態
	int    position;         //ポジション
	int    shak_num;         //揺れの数
	bool   attack_flag;      //攻撃フラグ
}ENEMY;

extern ENEMY Enemy[5],        //戦闘敵
             EnemyData[ENEMY_ID_NUM]; //敵データ
 

Re: #define文法的には間違ってない(多分)のにエラー

Posted: 2019年4月10日(水) 02:56
by かずま
TETSUCOM さんが書きました:
6年前
#defineで定義した一部の定数が何故かコンパイルエラーになるので
エラーメッセージをすべてコピペして見せてください。
定義した ENEMY_NUM を使用している部分のソースも必要です。
Battle.h など他のすべてのヘッダファイルに ENEMY_NUM に関する
定義はないのでしょうか?

Re: #define文法的には間違ってない(多分)のにエラー

Posted: 2019年4月10日(水) 04:04
by TETSUCOM
お返事ありがとうございます!エラーメッセージです↓↓↓
/////////////////////////////////////////////////////////////////////////////////////////////////
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(35): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(51): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(53): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(54): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>Enemy.cpp
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(35): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(51): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(53): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(54): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\enemyshak.h(19): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>EnemyShak.cpp
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(35): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(51): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(53): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(54): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>InitSystem.cpp
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(35): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(51): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(53): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(54): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>Main.cpp
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(35): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(51): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(53): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(54): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>Player.cpp
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(35): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(51): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(53): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(54): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\enemyshak.h(19): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>RingChara.cpp
1>c:\users\tetsu\documents\works\otokomusouchi\enemyshak.h(19): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>Title.cpp
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(35): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(51): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(53): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\ringchara.h(54): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>c:\users\tetsu\documents\works\otokomusouchi\enemyshak.h(19): error C2065: 'ENEMY_NUM': 定義されていない識別子です。
1>プロジェクト "ProjectDX.vcxproj" のビルドが終了しました -- 失敗。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
////////////////////////////////////////////////////////////////////////////////////////////////

ソースをすべて乗っけるとなると膨大な量になるのですが…
複数個所で定義しているという初歩的なミスはしていないように思います。

大昔の事なので記憶があやふやですが、

#define UFO xxx //xxxは適当な数字

何て定義した時も、何かエラーで弾かれた事があったような。
学校の先生に質問すると、「システムがなんたら~」とか言って
#defineで定義するのをやめたらいけたような記憶があります。
予約語以外にも使ってはいけない文字列とかあるんでしょうか。

Re: #define文法的には間違ってない(多分)のにエラー

Posted: 2019年4月10日(水) 07:16
by みけCAT
「ENEMY_NUMを定義している(た)部分」より前でRingChara.hなどをincludeしており、
ringchara.hでエラーが出ていますね。
そのため、ENEMY_NUMの定義より前に使用が来てしまった可能性が考えられます。
循環などが起こらないよう、includeの関係を考え直すべきでしょう。

Re: #define文法的には間違ってない(多分)のにエラー

Posted: 2019年4月10日(水) 14:08
by TETSUCOM
返信ありがとうございます!
#pragma onceさえしていれば何でもOKと思っていました。

出直してきます。ありがとうございましたm(_ _)m

Re: #define文法的には間違ってない(多分)のにエラー

Posted: 2019年4月11日(木) 06:01
by あたっしゅ
.cpp なら、#define を使うのではなく、 const int 等に書き換えた方が、よいのでは ?

Re: #define文法的には間違ってない(多分)のにエラー

Posted: 2019年4月11日(木) 16:05
by TETSUCOM
constってextern出来るんですね!知らなかったです。
勉強になりました!

ちなみに今回作ったゲームは動画がこちら↓↓↓


大したものじゃないんでプレイして下さいとまでは言いませんが
1分程度の動画なので見てくれると嬉しいです^^