我试图创建一个包含点基元的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|
答案 0 :(得分:0)
sf::VertexArray dot(sf::Points, 1);
这是带有初始化器的变量的声明:您只能在命名空间或函数范围内编写它们。解析器适合混淆,就像你在类范围内一样。它基本上试图将其解析为函数声明,但由于sf::Points
和1
都不是类型,因此这种方法最终也会失败。
您应该在此处使用构造函数的成员初始化列表:
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);
}
};