2013-08-16 39 views
-1

當我嘗試編譯我的程序時,出現以下錯誤消息,但我已經包含了包含'LittleMonkey'類聲明的頭文件。編譯時出錯:未聲明的標識符

1>------ Build started: Project: Estrellas, Configuration: Debug x64 ------ 
1>Build started 17/08/2013 0:24:31. 
1>InitializeBuildStatus: 
1> Touching "x64\Debug\Estrellas.unsuccessfulbuild". 
1>ClCompile: 
1> Missile_mgr.cpp 
1>Missile_mgr.cpp(68): error C2146: syntax error : missing ';' before identifier 'monkey' 
1>Missile_mgr.cpp(68): error C3861: 'monkey': identifier not found 
1>Missile_mgr.cpp(79): warning C4482: nonstandard extension used: enum 'MissileEventType' used in qualified name 
1>Missile_mgr.cpp(99): warning C4482: nonstandard extension used: enum 'MissileEventType' used in qualified name 
1>Missile_mgr.cpp(106): warning C4482: nonstandard extension used: enum 'MissileEventType' used in qualified name 
1>Missile_mgr.cpp(113): warning C4482: nonstandard extension used: enum 'MissileEventType' used in qualified name 
1> 
1>Build FAILED. 
1> 
1>Time Elapsed 00:00:03.21 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

我在這兩個文件上做錯了什麼?

Missile_mgr.cpp:

#include "Missile_mgr.h" 
#include "Constants.h" 
#include "Game.h" 
#include "Missile.h" 

void Missile_mgr::Test() { 

    LittleMonkey monkey(pGame); 

} 

Missile.h,其中包含LittleMonkey

#ifndef MISSILE_H 
#define MISSILE_H 

#include "Object.h" 
#include "AnimatedSprite.h" 

class Game; 

class Missile : public Object { 
public: 
    AnimatedSprite aSp; 
    Missile(Game* _pGame); 
    virtual void Load()=0; 
    virtual void Update()=0; 
    void Draw(); 

    Game* pGame; 
}; 


class LittleMonkey : public Missile { 
public: 
    explicit LittleMonkey(Game* _pGame) : Missile(_pGame) { }; 
    virtual void Load(); 
    virtual void Update(); 

}; 

#endif 

Missile_mgr.h

#ifndef MISSILE_MGR_H 
#define MISSILE_MGR_H 

#include "Quadtree.h" 
#include "Missile.h" 

class Game; 

enum MissileEventType { Wave, WaitForClean, WaitTime, Boss }; 

struct MissileEvent { 
    MissileEventType eventType; 
    union { 
     int WaitTime; 
    } aditional; 
}; 

class Missile_mgr { 
public: 
    enum MissileType { LittleMonkey, Calamar }; 

    bool initialize(Game* _pGame); 
    void LoadLevel(int level); 
    void Update(); // Update() calls HandleEvents() 
    void Draw(); 
    void Clear(); 

    std::list<Missile*> missileList; 
    sf::Texture txLittleMonkey; 
    sf::Texture txBigMonkey; 
    sf::Texture txCalamar; 
    sf::Texture txFruits; 
    sf::Texture txRockets; 
    sf::Texture txStars; 
    // Do waves? 

    float wait;// this is for wait event. 
    bool waiting; 

    Game* pGame; 
private: 
    bool HandleEvents(); 
    void DoWave(); 
    void DoBoss(); 
    std::vector<MissileEvent> eventQueue; 
    void AddMissile(MissileType* type); 

}; 

#endif 
+0

我可以添加更多的細節 – freesoul

+0

能否請您添加整個錯誤消息? 'Missile_mgr'從'Game'繼承嗎? – Mahesh

+0

新增!遊戲有一個Match類,它有一個Missile_mgr成員,但沒有被繼承。 – freesoul

回答

0
class Missile_mgr { 

因此,Missile_mgr不是從任何類繼承。

explicit LittleMonkey(Game* _pGame) : Missile(_pGame) { } 

LittleMonkey構造期待Game*類型的參數。

void Missile_mgr::Test() 
{ 
    LittleMonkey monkey(this); 

而在上面的語句,你想投Missile_mgr *Game *這是不可能的,編譯器抱怨它。

+0

真的!我已經修復了它,但我仍然得到相同的編譯器錯誤 – freesoul

0

我花了兩個小時才搞清楚的問題是:

class Missile_mgr { 
public: 

    enum MissileType { LittleMonkey, Calamar }; // <- LittleMonkey redefinition