gpt4 book ai didi

c++ - C++ SFML 中的抽象类错误

转载 作者:行者123 更新时间:2023-11-30 01:15:31 25 4
gpt4 key购买 nike

大家好,尽管尝试制作 Sierpinski 三角形会很有趣,但我遇到了这个抽象类错误的问题,我似乎无法弄清楚。当我尝试制作 SierpinskiTri“SierpinskiTri sierpinskiii;”时对象,然后将其绘制到窗口“window.draw(sierpinskiii);”我在那个对象上得到一个错误,说它是一个抽象类

class SierpinskiTri : public sf::Drawable{
public :

SierpinskiTri(sf::RenderWindow &window):m_window(window) {
//filledTriangle(300, 400, 300);
sierpinski(3 ,300, 0,300);
}

virtual void sierpinski(int n, double x, double y, double s){

filledTriangle(x, y, s);
sierpinski(n-1, x - s/2, y, s/2);
sierpinski(n-1, x + s/2, y, s/2);
sierpinski(n-1, x, y+sqrt(3)/2*s, s/2);

if(n == 0)
{
return;
}
}


virtual void filledTriangle(float x, float y, float s){
float* xl = new float[4];
xl[0] = x - s/2; xl[1]= x + s/2; xl[2] = x; xl[3] = x-s/2;
float* yl = new float[4];
yl[0] = sqrt(3)/2*s+y; yl[1] = yl[0]; yl[2] = y; yl[3] = yl[0];

draw(xl,yl,m_window);

}
private:
sf::RenderWindow &m_window;

virtual void draw(float xl[],float yl[],sf::RenderWindow &window) const {

sf::VertexArray triangle(sf::Triangles, 3);

triangle[0].position = sf::Vector2f(xl[0],yl[1]);
triangle[0].color = sf::Color::Blue;
triangle[1].position = sf::Vector2f(xl[1],yl[1]);
triangle[1].color = sf::Color::Red;
triangle[2].position = sf::Vector2f(xl[2],xl[2]);
triangle[2].color = sf::Color::White;
window.draw(triangle);
}


};

最佳答案

当您从 Drawable 继承时:

class SierpinskiTri : public sf::Drawable { .. };

您还继承了它的所有方法,其中之一是:

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

您没有提供 draw 的实现,因此您的 SierpinksiTri 类也是一个抽象类,您不能创建抽象类的实例。

解决方案是为draw() 提供一个实现。

关于c++ - C++ SFML 中的抽象类错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28307007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com