C ++, почему мой класс все еще абстрактный? - PullRequest
5 голосов
/ 24 марта 2011

Я уверен, что это что-то простое с моей стороны, но я не могу понять, почему мой компилятор считает один из моих классов абстрактным.Вот ситуация:

У меня есть абстрактный базовый класс, например, так:

class AnimatedDraw
{
public:
    virtual void Draw(sf::RenderWindow &window) = 0;
    virtual void Draw(sf::RenderWindow &window, sf::Shader shader) = 0;
    virtual void Update(sf::Clock &time) = 0;
};

И я наследую его так:

class ScreenLayer : public AnimatedDraw
{
public:
    ScreenLayer(void);

    virtual void Draw(sf::RenderWindow &window);

    virtual void Draw(sf::RenderWindow &window, sf::Shader &shader);

    virtual void Update(sf::Clock &clock);

    ~ScreenLayer(void);
};

для справки, ScreenLayerФайл .cpp выглядит следующим образом:

#include "ScreenLayer.h"
ScreenLayer::ScreenLayer(void)
{
}
void ScreenLayer::Draw(sf::RenderWindow &window)
{
}
void ScreenLayer::Draw(sf::RenderWindow &window, sf::Shader &shader)
{
}
void ScreenLayer::Update(sf::Clock &clock)
{
}
ScreenLayer::~ScreenLayer(void)
{
}

Однако, когда я пытаюсь использовать мой производный класс (то есть AnimatedDraw *testDrawer = new ScreenLayer;), мой компилятор жалуется, что ScreenLayer является абстрактным.Изменение AnimatedDraw на ScreenLayer также было недействительным по той же причине.Я переписал все абстрактные функции в моем базовом классе, не так ли?Я не уверен, почему это рассматривается как абстрактное.Любая помощь будет оценена

Спасибо

1 Ответ

21 голосов
/ 24 марта 2011

В объявлении базового класса нет амперсанда после sf :: Shader:

virtual void Draw(sf::RenderWindow &window, sf::Shader shader) = 0;

Производный класс имеет, следовательно, это другая перегруженная функция.

...