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:
Ich versuchte vor states
kaufmännische Definition hinzufügen, aber dann hat Einschuss eine abstrakte Klasse worden.
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 –
Sie haben versäumt, _alle Deklarationen_ in Ihrer 2. Klasse zu liefern, um die Interface-Deklarationen zu erfüllen. –
Haben Sie in Bullet eine Definition von 'draw (sf :: RenderTarget & target, sf :: RenderStates states)? Wo ist der Körper dieser Funktion? – Chringo