“ 1つの宣言に複数のタイプ”しかし、ありません。行方不明
質問
Code :: Blocks(gccコンパイラ)でプログラムをコンパイルしようとしました。そして、エラーが発生します:これが不平を言っているソースファイルです:
#ifndef BOT_H
#define BOT_H
#include "player.h"
#include "timer.h"
class BOTS; // forward decalaration of BOTS
class BOT : public PLAYER
{
public:
enum BotStatus{BotMoving,BotPursue,BotChasePowerup};
enum BotMovDir{Up,Down,Left,Right,Forward,Backward};
enum BotSkill{Easy,Normal,Hard,Expert,Insane};
protected:
BotStatus Status; // this is the line it complaining about
BotMovDir CurrentMov;
TIMER CTimer;
bool Stucked;
BotSkill Skill;
VECTOR3D AimTarget;
// VECTOR3D ShotTarget;
PLAYER *PursueObj;
bool SameLevel;
BOTS *Owner;
bool PlayerHitMe;
void OnDamage(double dmg,const wchar_t *Shooter,bool s);
void OnReset();
public:
BOT(BOTS *o,const wchar_t *botname) : PLAYER(botname), PlayerHitMe(false), Status(BotMoving), Skill(Easy), Owner(o)
{
PlayerInit();
}
void SetSkill(BotSkill bs) {Skill=bs;}
void BotControl();
void SetSameLevel(bool s) {SameLevel=s;}
virtual ~BOT() {}
};
#endif
16行目の「1つの宣言に複数の型がある」と文句を言います。そしてそれは私を夢中にさせています。私は何度もグーグルで検索しましたが、一般的な解決策は「見つからないセミコロンを見つける」ことです。そして問題は、行方不明のセミコロンがないことです。コメントがある場合でも、eofを超えている場合でも(ファイルが小さくなるようにすべてのフィールドを削除する場合)、常に16行目(少なくとも保護された後)を指します。
(この問題はささいなことかもしれませんし、今は疲れているかもしれませんので、私は眠らなければなりません。そして明日までに誰かが私にアドバイスをしてくれることを望みます。)
解決
Status
という名前のクラスまたは他のUDTがありますか?メンバーの名前を Status _
に変更するとどうなりますか?
他のヒント
は" Status
"ですマクロまたはヘッダーの1つで宣言または定義されている(またはそれらに含まれるもの)?
私はバカだ...
Code :: Blocksは、ファイルのコンパイルを開始する前にソースファイルを保存しない場合があります。 MSVC ++は常にコンパイル前に保存します。それが本当の問題でした。
コードのどこかにStatusマクロがあったようです。しかし、それは私自身のタイプではありませんでした。おそらくwxwidgetsヘッダーからのマクロ...
お見せしたファイルは header ファイルです。あなたが持っている問題は、そのヘッダーを #include
している source ファイルの16行目にあります。受け取った exact エラーメッセージと、エラーメッセージで参照されているファイルの関連部分をコピーして貼り付けてください。
最後の previous クラス宣言にはセミコロンがありますが、文句を言っているものではありません。エラーはおそらく「timer.h」にありますが、おそらく「player.h」にあります
エラーは、最初のクラス定義の前に2番目のクラスの前方宣言が不要なために発生する可能性があります。