无法实现SFML中的纯虚函数draw,编译报错求助
解决SFML Drawable纯虚函数未实现的编译错误
嘿,这个问题我之前也踩过类似的坑!核心原因是你没有正确覆盖SFML Drawable类中的纯虚draw函数,关键在于你漏掉了const修饰符。
先看SFML给出的Drawable类定义:
class SFML_GRAPHICS_API Drawable { public: virtual ~Drawable() {} protected: friend class RenderTarget; virtual void draw(RenderTarget& target, RenderStates states) const = 0; };
注意这里的draw函数末尾带有const,这个const是函数签名的一部分——它表明这个成员函数不会修改类的成员变量。
再看你在surface.hpp里的draw声明:
private: void draw(sf::RenderTarget& target, sf::RenderStates states);
你没有加const,这在C++里会被视为一个全新的函数,而不是对父类纯虚函数的覆盖。编译器会认为你完全没实现Drawable要求的draw纯虚函数,所以抛出了那个错误。
修复步骤
- 修改头文件中的
draw声明,添加const:
class surface : public sf::Drawable { // ... 其他成员 private: void draw(sf::RenderTarget& target, sf::RenderStates states) const; // 加上const };
- 修改cpp文件中的实现,同样添加
const:
void surface::draw(sf::RenderTarget& target, sf::RenderStates states) const { // 加上const // ... 你的绘制逻辑代码 }
这样修改后,你的draw函数就完全匹配父类纯虚函数的签名了,编译器会识别到这是对纯虚函数的实现,编译错误也就消失了。
内容的提问来源于stack exchange,提问作者Richard Paul Astley
相关产品推荐
相关产品推荐

