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

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

我继承了它:

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 也是无效的。我重写了基类上的所有抽象函数,不是吗?我不确定为什么它被视为抽象的。任何帮助将不胜感激

谢谢

最佳答案

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

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

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

关于C++ 为什么我的类仍然是抽象的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5416048/

相关文章:

C++ 如何区分异构集合中的特定对象类型?

c++ - 如何在不将它们作为参数传递的情况下访问线程中的类数据成员?

c++ - 如何在 C++ 中编程为接口(interface)/抽象类?

java - 抽象类和接口(interface)

C++ 数组类返回奇怪的值

c++ - 读取正在运行的进程的导入表

以抽象类作为参数的 Java 方法,返回子类的实例

c++ - 多态性 c++,试图访问从抽象基类派生的类的成员函数

c++ - 将结构成员传递给函数

java - 当我可以简单地使用方法覆盖时,为什么要扩展抽象类来更改函数定义?