2017-06-04 13 views
0

私は2つのクラス、Player、Bulletを作成しました。どちらも同じSFMLクラスsf::Drawableとsf :: Transformableから継承しています。1つのクラスで継承を行いますが、別のクラスでは継承しません。

ファーストクラス:

class Player : 
    public sf::Drawable, sf::Transformable 
{ 
public: 
    Player(); 
    ~Player(); 

    enum Direction {UP, DOWN, LEFT, RIGHT}; 

    void update(); 
    void move(Direction dir); 
    float getRotation(); 
    sf::Vector2f getPosition(); 
    void shoot(); 
    bool moveStatus; 

private: 
    sf::Sprite sprite; 
    sf::Texture texture; 

    float speed; 
    size_t frame; 

    sf::Clock animClock; 
    sf::Clock shootTime; 

    virtual void draw(sf::RenderTarget &target, sf::RenderStates states) const; 
}; 

セカンドクラス:

class Bullet : 
    public sf::Drawable, sf::Transformable 
{ 
public: 
    Bullet(float rot, sf::Vector2f pos); 
    ~Bullet(); 

    void update(); 
    float getRotation(); 
    sf::Vector2f getPosition(); 
    void move(float x, float y); 

private: 
    sf::Sprite sprite; 
    sf::Texture texture; 

    virtual void draw(sf::RenderTarget &target, sf::RenderStates states) const; 
}; 

私はvirtual void draw(sf::RenderTarget &target, sf::RenderStates states) const;に問題があります。 Playerクラスでは動作しますが、Bulletクラスでは動作しません。

リンカが2つのエラーが返されます。
enter image description here
を私はstates前の定義にアンパサンドを追加しようとしましたが、その後弾丸は抽象クラスとなっています。

+0

[link](https://stackoverflow.com/questions/5416048/c-why-is-my-class-still-abstract)の質問がありました。しかし、私の宣言は正しいですし、あるクラスでは動作しますが、別のクラスでは動作しません。 –

+0

2番目のクラスで宣言の_allをすべて提供することができませんでした。 –

+2

Bulletに 'draw(sf :: RenderTarget&target、sf :: RenderStates states)の定義がありますか?この関数の本体はどこですか? – Chringo

答えて

0

Bulletクラスのdrawメソッドの実装が欠落しています。

コードなしでは、言いにくいですが、完全に紛失しているか、署名に入力ミスがある可能性があります。