我尝试使用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行“一种宣言中的多种类型”,这让我发疯。我google了很多,但常见的解决方案是“找到丢失的分号”。问题是根本没有丢失的分号。它总是指向第16行(至少在受保护之后),即使有注释,甚至超出了eof(当我删除所有字段以便文件变小时)。
(这个问题可能微不足道,我现在可能已经累了,所以我一定要睡一觉。我希望明天早上会有人给我一些建议。)
答案 0 :(得分:4)
您是否有一个名为Status
的类或其他UDT?如果您将会员名称更改为Status_
答案 1 :(得分:3)
“Status
”是一个宏还是在其中一个标题中声明/定义(或者它们包含的内容)?
答案 2 :(得分:3)
我是个傻瓜......
Code :: Blocks有时在开始编译文件之前不保存源文件。 MSVC ++总是在编译之前保存它。这才是真正的问题。
似乎代码中的某处有一个Status宏。但这不是我自己的类型。可能是来自wxwidgets标题的宏......
答案 3 :(得分:1)
您向我们展示的文件是标头文件。您遇到的问题是在某个源文件的第16行,#include
该标题。您可以复制+粘贴您收到的完全错误消息,以及错误消息中引用的文件的相关部分吗?
答案 4 :(得分:1)
最后一个上一个类声明中缺少一个分号,而不是它抱怨的那个。错误可能在“timer.h”中,但可能在“player.h”
中答案 5 :(得分:-1)
错误可能是因为在第一个类定义之前不需要第二类前向声明。