类中的VertexArray声明

时间:2014-10-16 21:17:39

标签: c++ sfml

我试图创建一个包含点基元的struct和一个绘制它的方法。但是,在方法之外声明sf::VertexArray似乎不起作用。方法中完全相同的声明完全正常。以下是代码示例和错误。 SFML 2.1版

编辑:在两种情况下都使用using namespace std;

使用:

struct Point
{
    int dot_x, dot_y;
    sf::Color dot_color;
    Point (int x = 50, int y = 50, sf::Color color = sf::Color::Green) {
        dot_color = color;
        dot_x = x;
        dot_y = y;
    }
    virtual void draw() {
        sf::VertexArray dot(sf::Points, 1);
        dot[0].position = sf::Vector2f(dot_x,dot_y);
        dot[0].color = dot_color;
        window.draw(dot);
    }
};

是否有效:

struct Point {
    sf::VertexArray dot(sf::Points, 1);
    Point (int x = 50, int y = 50, sf::Color color = sf::Color::Green) {
        dot[0].position = sf::Vector2f(x,y);
        dot[0].color = color;
    }
    virtual void draw() {
        window.draw(dot);
    }
};

错误(全部指向 VertexArray 声明字符串):

E:\CodeBlocks\Labs\sem3\sfml1\main.cpp|64|error: 'sf::Points' is not a type|
E:\CodeBlocks\Labs\sem3\sfml1\main.cpp|64|error: expected identifier before numeric constant|
E:\CodeBlocks\Labs\sem3\sfml1\main.cpp|64|error: expected ',' or '...' before numeric constant|

1 个答案:

答案 0 :(得分:0)

sf::VertexArray dot(sf::Points, 1);

这是带有初始化器的变量的声明:您只能在命名空间或函数范围内编写它们。解析器适合混淆,就像你在类范围内一样。它基本上试图将其解析为函数声明,但由于sf::Points1都不是类型,因此这种方法最终也会失败。

您应该在此处使用构造函数的成员初始化列表

struct Point
{
    sf::VertexArray dot;

    Point (int x = 50, int y = 50, sf::Color color = sf::Color::Green)
      : dot(sf::Points, 1)
    {
        dot[0].position = sf::Vector2f(x,y);
        dot[0].color = color;
    }

    virtual void draw()
    {
        window.draw(dot);
    }
};