C++ C++;为什么我的课还是抽象的?

C++ C++;为什么我的课还是抽象的?,c++,abstract-class,C++,Abstract Class,我确信这对我来说很简单,但我不明白为什么我的编译器认为我的一个类是抽象的。情况如下: 我有这样一个抽象基类: 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

我确信这对我来说很简单,但我不明白为什么我的编译器认为我的一个类是抽象的。情况如下:

我有这样一个抽象基类:

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=newscreenlayer;
),我的编译器会抱怨ScreenLayer是抽象的。出于同样的原因,将AnimatedDraw更改为ScreenLayer也是无效的。我在基类上重写了所有的抽象函数,不是吗?我不知道为什么它被认为是抽象的。任何帮助都将不胜感激


谢谢

您的基类声明在sf::Shader之后没有符号和:

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

派生类有,因此它是一个不同的重载函数。

@user:我几乎可以肯定,编译器会给你一个错误,指出哪个方法导致类是抽象的。还要在基类中声明一个虚拟析构函数。从技术上讲,派生类中的函数隐藏基类中的一个,而不是重载。woops。。对不起,我没看到。感谢您发现错误这也是我犯的一个错误,这就是我知道要查找什么的原因:)在C++0x中,您将能够向函数添加属性,例如
override
(在派生类中),以便编译器检查您的方法是否确实重写了某些内容并发出警告。