2017-06-04 2 views
0

Ich habe zwei Klassen erstellt: Player, Bullet. Beide erben von den gleichen SFML-Klassen sf::Drawable und sf :: Transformable.Vererbung Arbeit mit einer Klasse, aber nicht mit einer anderen

Erste Klasse:

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; 
}; 

Zweite Klasse:

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; 
}; 

Ich habe ein Problem mit virtual void draw(sf::RenderTarget &target, sf::RenderStates states) const;. In der Player-Klasse funktioniert es, aber in der Bullet-Klasse nicht.

Der Linker gibt zwei Fehler:
enter image description here
Ich versuchte vor states kaufmännische Definition hinzufügen, aber dann hat Einschuss eine abstrakte Klasse worden.

+0

Ich sah die Frage [link] (https://stackoverflow.com/questions/5416048/c-why-is-my-class-still-abstract). Aber meine Deklaration ist korrekt und in einer Klasse funktioniert es, aber in einer anderen nicht –

+0

Sie haben versäumt, _alle Deklarationen_ in Ihrer 2. Klasse zu liefern, um die Interface-Deklarationen zu erfüllen. –

+2

Haben Sie in Bullet eine Definition von 'draw (sf :: RenderTarget & target, sf :: RenderStates states)? Wo ist der Körper dieser Funktion? – Chringo

Antwort

0

Ihr Problem ist, dass Sie in Ihrer Bullet Klasse tatsächlich die Implementierung des draw Verfahren fehlen.

Ohne Code ist es schwer zu sagen, aber Sie vermissen es entweder vollständig, oder haben vielleicht einen Tippfehler in der Signatur.

Verwandte Themen