2009-03-01 3 views
2

Code :: Blocks (gcc 컴파일러)를 사용하여 프로그램을 컴파일하려고했습니다. 그리고 오류가 발생합니다 :"하나의 선언에 여러 유형이 있지만"아니오; missing

#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 라인에 대해 불평하고 나를 미치게 운전 : 여기에 대해 불평 소스 파일입니다. 나는 많이 봤지만 일반적인 해결책은 "누락 된 세미콜론 찾기"입니다. 그리고 문제는 세미콜론이 전혀 없다는 것입니다. 주석이 있거나 심지어는 eof (파일이 작아 지도록 모든 필드를 제거 할 때) 이상인 경우에도 항상 16 행을 가리 킵니다 (최소한 보호 된 후에).

(이 문제는 사소한 수 있으며 지금은 피곤 될 수있다, 그래서 잠을해야합니다. 그리고 나는 누군가가 나에게 아침 내일까지 조언을 준 바랍니다.)

답변

4

당신은 클래스 또는 일부가 있습니까 Status이라는 다른 UDT? 회원의 이름을 Status_으로 변경하면 어떨까요?

+0

필드를 주석 처리 할 때 다음 줄에 대해 불평을 시작합니다. – Calmarius

3

매크로 "Status"이 헤더 중 하나 (또는 ​​포함 된 값)에 매크로로 선언되거나 정의되어 있습니까?

1

우리에게 보여 주신 파일은 헤더 파일입니다. 현재 가지고있는 문제는 소스 파일의 16 번째 줄에 있으며 그 헤더는 #include입니다. 오류 메시지에 언급 된 파일의 관련 부분과 함께 정확한 오류 메시지를 복사 + 붙여 넣을 수 있습니까?

+0

경고와 관련된 경고 (이 문제와 관련이 없음)와이 오류와 관련된 다른 오류 (물론 추가 정보가 없으며이 모든 내용을 가리 킵니다. line) – Calmarius

+0

반복 : 수신중인 정확한 오류 메시지를 복사하여 붙여 넣고 관련이 없다고 생각되는 경고를 포함하십시오. 관련성이 매우 높습니다. 첫 번째 오류/경고는 거의 항상 가장 관련이 있습니다. –

1

이전의 클래스 선언에 세미콜론이 누락되었습니다. 불만 사항이 아닙니다. 이 오류는하지만 어쩌면 "player.h"나는 바보 야

+0

두 클래스 모두 선언이 끝나면 세미콜론을 사용합니다. – Calmarius

3

...에, 아마 "timer.h"에

코드 :: 블록은 때때로 전에 컴파일 시작 소스 파일을 저장하지 않습니다 파일. MSVC++는 컴파일하기 전에 항상 저장합니다. 그것은 진짜 문제였습니다.

코드의 어딘가에 Status 매크로가있는 것 같습니다. 그러나 그것은 내 자신의 유형이 아니 었습니다. 아마도 wxwidgets 헤더의 매크로입니다 ...

-1

오류는 일류 정의보다 먼저 2 차 클래스 선언이 필요하지 않기 때문에 발생했을 수 있습니다.

+0

스택 오버플로에 오신 것을 환영합니다. 이 질문에 대한 이상한 대답입니다. 질문 전체가 2009 년 3 월에 답변되었습니다. 승인 된 답변과 _ 메아 culpa_도있었습니다. 귀하의 대답은이 문제에 대한 새롭고 확실한 해결책을 제공하지 않습니다. 그것은 아주 잠정적이며, 실제로 아무도 도움이되지 않습니다. 귀하의 답변이 새로운 것을 제공하는지 확인하십시오. 사람들은 기꺼이 투표를 할 때 기꺼이 투표 할 수 있습니다. –