无法从 SFML 实现纯虚函数

Can't implement pure virtual function from SFML

本文关键字:函数 实现 SFML      更新时间:2023-10-16

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){
// ...
}

但是当我运行代码并尝试从main.cppsurface mySurface(/* ... */);时,出现错误:

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

我几乎 100% 确定我实现了它的正确,那么为什么 clang 不让我编译呢?我还试图在surface.hppsurface的定义中定义draw,但没有任何帮助......

我几乎 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;
^^^^^
};