无法从 SFML 实现纯虚函数
Can't implement pure virtual function from 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:
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.cpp
surface mySurface(/* ... */);
时,我得到错误:
SFML/Graphics/Drawable.hpp:69:18: Unimplemented pure virtual method 'draw' in 'surface'
我几乎 100% 确定我的实现是正确的,那么为什么 clang 不让我编译?我还尝试在 surface.hpp
中 surface
的定义中定义 draw
但没有任何帮助...
I'm almost 100% sure I implemented it right
你说得好"almost"。
virtual void draw(RenderTarget& target, RenderStates states) const = 0;
^^^^^
const
是函数签名的一部分!它也必须出现在您的实现中:
class surface : public sf::Drawable
{
// ...
void draw(sf::RenderTarget& target, sf::RenderStates states) const;
^^^^^
};
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:
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.cpp
surface mySurface(/* ... */);
时,我得到错误:
SFML/Graphics/Drawable.hpp:69:18: Unimplemented pure virtual method 'draw' in 'surface'
我几乎 100% 确定我的实现是正确的,那么为什么 clang 不让我编译?我还尝试在 surface.hpp
中 surface
的定义中定义 draw
但没有任何帮助...
I'm almost 100% sure I implemented it right
你说得好"almost"。
virtual void draw(RenderTarget& target, RenderStates states) const = 0;
^^^^^
const
是函数签名的一部分!它也必须出现在您的实现中:
class surface : public sf::Drawable
{
// ...
void draw(sf::RenderTarget& target, sf::RenderStates states) const;
^^^^^
};