2017-06-04 86 views
0

我创建了两个类:播放器,子弹。两者都继承自相同的SFML类sf::Drawable和sf :: Transformable。继承工作与一个类,但不与另一个

第一类:

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

我看到了问题[链接](https://stackoverflow.com/questions/5416048/c-why-is-my-class-still-abstract)。但是我的声明是正确的,在一个类中它可以工作,但在另一个类中不是 –

+0

您错过了在第二类中提供_all声明_以满足接口声明。 –

+2

你有没有在子弹中定义'draw(sf :: RenderTarget&target,sf :: RenderStates states)'?这个功能的主体在哪里? – Chringo

回答

0

您的问题是您在Bullet类中缺少draw方法的实际实施

如果没有代码,很难说,但是您要么完全忽略它,要么可能在签名中有错字。

相关问题