我试图看看Stackoverflow和Google上列出的类似问题,但他们主要处理模板,这不是我的情况.我在Debian测试64位上使用GCC 4.4.5.
所以,我有两个类 – CEntity:
所以,我有两个类 – CEntity:
#ifndef CENTITY_H_INCLUDED #define CENTITY_H_INCLUDED #include "global_includes.h" // game #include "CAnimation.h" #include "Vars.h" #include "vector2f.h" #include "Utils.h" class CAnimation; class CEntity { public: CEntity(); virtual ~CEntity(); void _update(Uint32 dt); void updateAnimation(Uint32 dt); void addAnimation(const std::string& name,CAnimation* anim); void addAnimation(const std::string& name,const CAnimation& anim); void removeAnimation(const std::string& name); void clearAnimations(); bool setAnimation(const std::string& name); SDL_Surface* getImage() const; const vector2f& getPos() const; const vector2f& getLastPos() const; F getX() const; F getY() const; F getLastX() const; F getLastY() const; SDL_Rect* getHitBox() const; SDL_Rect* getRect() const; F getXSpeed() const; F getYSpeed() const; void setPos(const vector2f& pos); void setPos(F x,F y); void setPos(F n); void setX(F x); void setY(F y); void setHitBoxSize(int w,int h); void setHitBoxSize(SDL_Rect* rect); void setHitBoxWidth(int w); void setHitBoxHeight(int h); void setSpeed(F xSpeed,F ySpeed); void setXSpeed(F xSpeed); void setYSpeed(F ySpeed); void stop(); void stopX(); void stopY(); void affectByGravity(bool affect); void translate(const vector2f& offset); void translate(F x,F y); bool collide(CEntity& s); bool collide(CEntity* s); protected: CAnimation* mCurrentAnimation; SDL_Surface* mImage; vector2f mPos; vector2f mLastPos; SDL_Rect* mHitBox; // used for collisions SDL_Rect* mRect; // used only for blitting F mXSpeed; F mYSpeed; bool mAffByGrav; int mHOffset; int mVOffset; private: std::map<std::string,CAnimation*> mAnims; }; #endif // CENTITY_H_INCLUDED
和继承自CEntity的CPlayerChar:
#ifndef CPLAYERCHAR_H_INCLUDED #define CPLAYERCHAR_H_INCLUDED #include "global_includes.h" // game #include "CEntity.h" class CEntity; class CPlayerChar : public CEntity { public: CPlayerChar(); virtual ~CPlayerChar(); virtual void update(Uint32 dt) = 0; virtual void runLeft() = 0; virtual void runRight() = 0; virtual void stopRunLeft() = 0; virtual void stopRunRight() = 0; virtual void attack() = 0; virtual void stopAttack() = 0; virtual void attack2() = 0; virtual void stopAttack2() = 0; virtual void ground() = 0; virtual void midair() = 0; void jump(); void stopJump(); protected: // looking right? bool mRight; bool mJumping; bool mOnGround; bool mGrounded; }; #endif // CPLAYERCHAR_H_INCLUDED
当我尝试编译它,GCC抛出这个错误:
CPlayerChar.h:12: error: invalid use of incomplete type ‘struct CEntity’ CPlayerChar.h:9: error: forward declaration of ‘struct CEntity’
我没有前向声明“CEntity类”在第9行的CPlayerChar.h中,但是它会抛出它
CPlayerChar.h:12: error: expected class-name before ‘{’ token
所以前进的声明必须在那里.另外,CEntity显然是一个类,而不是一个结构体.