“一种声明中有多种类型”,但没有;失踪

时间:2009-03-01 22:48:43

标签: gcc types

我尝试使用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(当我删除所有字段以便文件变小时)。

(这个问题可能微不足道,我现在可能已经累了,所以我一定要睡一觉。我希望明天早上会有人给我一些建议。)

6 个答案:

答案 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)

错误可能是因为在第一个类定义之前不需要第二类前向声明​​。