C++ Can';t从SFML实现纯虚函数

C++ Can';t从SFML实现纯虚函数,c++,sfml,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 :

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(/*…*/)时从我的
main.cpp
中,我得到错误:

SFML/Graphics/Drawable.hpp:69:18: Unimplemented pure virtual method 'draw' in 'surface'
我几乎100%确信我实现了它,那么为什么clang不让我编译呢?我还尝试在
surface.hpp中的
surface
定义中定义
draw
,但没有任何帮助

我几乎百分之百肯定我实施得对

幸好你说“差不多”

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

class surface : public sf::Drawable 
{
    // ...
    void draw(sf::RenderTarget& target, sf::RenderStates states) const;
                                                                 ^^^^^
};
Try:
void draw(sf::RenderTarget&target,sf::RenderStates状态)常量覆盖
缺少的
const
表示您声明了一个新方法,而不是重写现有的虚拟方法。而且,
override
关键字只是一个很好的实践,当函数原型不匹配时,应该使错误消息更加清晰。
class surface : public sf::Drawable 
{
    // ...
    void draw(sf::RenderTarget& target, sf::RenderStates states) const;
                                                                 ^^^^^
};