C++为什么我的课仍然是抽象的?

Meg*_*ron 5 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 &time) = 0;
};
Run Code Online (Sandbox Code Playgroud)

我继承了它:

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);
};
Run Code Online (Sandbox Code Playgroud)

作为参考,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)
{
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用我的派生类(即AnimatedDraw *testDrawer = new ScreenLayer;)时,我的编译器抱怨ScreenLayer是抽象的.由于同样的原因,将AnimatedDraw更改为ScreenLayer也无效.我覆盖了我基类上的所有抽象函数,不是吗?我不确定为什么它被视为抽象.任何帮助,将不胜感激

谢谢

sas*_*alm 21

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

virtual void Draw(sf::RenderWindow &window, sf::Shader shader) = 0;
Run Code Online (Sandbox Code Playgroud)

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

  • 从技术上讲,派生类中的函数会在基类中隐藏一个函数,而不是重载. (5认同)