SFML创建RectangleShape时出现expected ')' before ','错误如何解决
问题原因
你遇到的编译错误是C++经典的*最令人头疼的解析(Most Vexing Parse)*问题导致的:
- 在类内声明成员变量时,如果你用
sf::RectangleShape choosepen(sf::Vector2f(x,y));这种带小括号的写法,编译器会优先将其解析为成员函数声明:返回值为sf::RectangleShape,函数名为choosepen,入参为两个sf::Vector2f类型的变量x、y。 - 你的类中已经声明了同名的float类型成员y,所以编译器直接抛出变量重定义、语法解析相关的错误。
你把这段代码放到main函数里不会报错的原因是:局部作用域下不存在成员函数声明的场景,编译器会正确将其解析为变量定义。
解决方法
以下三种方案任选其一即可:
- 用C++11及以后支持的统一初始化语法(花括号)替换小括号,避免解析歧义:
sf::RectangleShape choosepen{sf::Vector2f{x, y}};
- 用显式赋值的初始化写法:
sf::RectangleShape choosepen = sf::RectangleShape(sf::Vector2f(x, y));
- 将成员初始化移到类构造函数的初始化列表中(兼容旧C++标准):
// 类内先声明成员 sf::RectangleShape choosepen; // 构造函数初始化列表写初始化逻辑 window() : choosepen(sf::Vector2f(x, y)) {}
内容的提问来源于stack exchange,提问作者the technician 274
相关产品推荐
相关产品推荐

