【发布时间】:2014-05-12 21:54:49
【问题描述】:
您好,我在尝试此代码时遇到错误:
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
const float ballVelocity = 8.f;
struct Ball
{
Vector2f velocity(-ballVelocity, -ballVelocity);
};
我正在使用 SFML 并通过教程进行操作,它应该可以工作,但 Visual Studio 在这一行中说:
Vector2f velocity(-ballVelocity, -ballVelocity);
需要一个类型说明符。
(编辑:要清楚我正在尝试创建 Vector2 的对象)
【问题讨论】:
-
你偶然发现了vexing parse
-
@user2079303:不,他没有。当存在用户想要创建对象的语法,但语法与函数声明模棱两可,编译器将其解析为后者时,就会发生令人烦恼的解析。这完全是不正确的语法。或者至少,这是在这个特定上下文(类的主体)中不允许使用的语法。
-
@BenjaminLindley:嗯,他的意思是他的代码是一个对象创建,编译器确实将它解释为一个函数声明(尽管由于参数而失败)。即使这不是规范的令人烦恼的解析,我也认为这同样令人烦恼,因为编译器错误与不正确的函数声明有关,而不是与不正确的成员初始化有关。我敢打赌,c++11 没有使用这种特殊语法添加非静态成员初始化,因为它总是与函数声明模棱两可。
标签: c++ vector constructor sfml