无法从SFML实现纯虚函数

时间:2018-05-16 01:00:04

标签: c++ sfml

SFML定义了这个虚函数:

class SFML_GRAPHICS_API Drawable
{
public: virtual ~Drawable() {}

protected:
    friend class RenderTarget;
    virtual void draw(RenderTarget& target, RenderStates states) const = 0;
};

在我surface.hpp的代码中,我创建了以下类:

class surface : public sf::Drawable
{
    friend class vertex;
public:
    surface(sf::Vector2f p1, sf::Vector2f p2, sf::Vector2f p3, sf::Vector2f p4);
    ~surface();
    vertex& operator[](int i);
private:
    void draw(sf::RenderTarget& target, sf::RenderStates states);
};

surface.cpp中我提供了draw的实现:

void surface::draw(sf::RenderTarget& target, sf::RenderStates states){
    // ...
}

但是,当我运行我的代码并尝试surface mySurface(/* ... */); main.cpp时,我收到错误:

SFML/Graphics/Drawable.hpp:69:18: Unimplemented pure virtual method 'draw' in 'surface'

我几乎100%肯定我是正确实现的,那么为什么不让clang让我编译?我还尝试在draw的{​​{1}}定义中定义surface,但没有任何帮助......

1 个答案:

答案 0 :(得分:3)

  

我几乎100%确定我是否正确实施了

你说的好事"几乎"。

virtual void draw(RenderTarget& target, RenderStates states) const = 0;
                                                             ^^^^^

const是功能签名的一部分!它也必须出现在您的实现中:

class surface : public sf::Drawable 
{
    // ...
    void draw(sf::RenderTarget& target, sf::RenderStates states) const;
                                                                 ^^^^^
};