"несколько типов в одном объявлении", но нет; отсутствует - PullRequest
2 голосов
/ 02 марта 2009

Я попытался скомпилировать свою программу с помощью 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-ю строку "несколько типов в одной декларации", и это сводит меня с ума. Я много гуглил, но общее решение - найти пропущенную точку с запятой. И проблема в том, что здесь нет пропущенной точки с запятой. Он всегда указывает на 16-ю строку (по крайней мере, после защищенной), даже если есть комментарий или даже он находится за пределами eof (когда я удаляю все поля, чтобы файл становился маленьким).

(Эта проблема может быть тривиальной, и я, возможно, уже устала, поэтому мне нужно поспать. И я надеюсь, что кто-нибудь даст мне какой-нибудь совет завтра утром.)

Ответы [ 6 ]

4 голосов
/ 02 марта 2009

У вас есть класс или другой UDT с именем Status? Что если вы измените имя участника на Status_?

3 голосов
/ 03 марта 2009

Я дурак ...

Code :: Blocks иногда не сохраняет исходный файл перед началом компиляции файла. MSVC ++ всегда сохраняйте его перед компиляцией. Это была настоящая проблема.

кажется, что где-то в коде был макрос Status. Но это был не мой тип. Возможно, макрос из заголовка wxwidgets ...

3 голосов
/ 02 марта 2009

Является ли "Status" макросом или иным образом объявленным / определенным в одном из заголовков (или что бы они ни включали)?

1 голос
/ 02 марта 2009

В последней предыдущей декларации класса отсутствует точка с запятой, а не та, на которую она жалуется. Ошибка, вероятно, в "timer.h", но, возможно, в "player.h"

1 голос
/ 02 марта 2009

Файл, который вы нам показали, является header файлом. Ваша проблема в 16-й строке какого-то исходного файла, который #include содержит этот заголовок. Можете ли вы скопировать + вставить полученное сообщение об ошибке точный , а также соответствующую часть файла, указанного в сообщении об ошибке?

0 голосов
/ 19 июня 2012

Ошибка может быть из-за того, что предварительное объявление 2-го класса не требуется перед определением первого класса.

...