错误:令牌之前的预期构造函数、析构函数或类型转换'*'

error: expected constructor, destructor, or type conversion before '*' token

本文关键字:析构函数 类型转换 构造函数 令牌 错误      更新时间:2023-10-16

我有一个C++类,尽管我有另一个用类似语法编写的类,可以毫不费力地编译,但我不断收到此错误。

这是我的.h:

#ifndef FISHPLAYER_H
#define FISHPLAYER_H
#include "Player.h"

class FishPlayer : public Player
{
public:
    float xThrust;
    float yThrust;
    static FishPlayer* getInstance();
protected:
private:
    FishPlayer();
    ~FishPlayer();
    static FishPlayer* instance;
};
#endif

这是我的.cpp:

#include "..includeFishPlayer.h"
FishPlayer* FishPlayer::instance=0;  // <== I Get The Error Here
FishPlayer::FishPlayer()
{
    //ctor
    xThrust = 15.0f;
    yThrust = 6.0f;
}
FishPlayer::~FishPlayer()
{
    //dtor
}

FishPlayer* FishPlayer::getInstance() { // <== I Get The Error Here
    if(!instance) {
        instance = new FishPlayer();
    }
    return instance;
}

我已经找了一段时间了,它一定是这么大的东西,我看不到它。

这是继承:

#ifndef PLAYER_H
#define PLAYER_H
#include "Ennemy.h"
class Player : public Ennemy
{
    public:
    protected:
        Player();
        ~Player();
    private:
};
#endif // PLAYER_H

而更高的一个:

#ifndef ENNEMY_H
#define ENNEMY_H
#include "Doodad.h"
class Ennemy : public Doodad
{
    public:
        float speedX;
        float maxSpeedX;
        float speedY;
        float maxSpeedY;
        float accelerationX;
        float accelerationY;
        Ennemy();
        ~Ennemy();
    protected:
    private:
};

和超阶级

#include <vector>
#include <string>

enum DoodadType{FishPlayer,Player,AstroPlayer,Ennemy,DoodadT = 999};
enum DoodadRange{Close, Medium , Far};
enum EvolutionStage{Tiny, Small, Average, Large};
class Doodad
{
    public:
        float score;
        void die();
        EvolutionStage evolutionStage;
        DoodadRange range;
        Doodad();
        virtual ~Doodad();
        Doodad(Doodad const& source);
        std::vector<Animation> animations;
        double posX;
        double posY;
        std::string name;
        std::string currentAnimation;
        int currentFrame;
        DoodadType type();
        SDL_Surface getSpriteSheet();
        bool moving;
        void update();
    protected:
    private:
        SDL_Surface spriteSheet;
};

看起来您在Doodad.h中使用FishPlayer作为枚举值

它与您尝试声明的类同名。这可能是问题的根源。

一般来说,最好使用FISH_PLAYER,或者Type_FishPlayer枚举值的命名方案,以避免这样的冲突。

相关文章: