如何用SFML创建Vector2f类型数组?返回值异常问题求助
解决SFML中Vector2f多值返回的问题
你的代码问题出在return s,f;这一行——这是C++的逗号表达式,它会依次执行s和f两个表达式,但最终只返回最后一个表达式的值,也就是f。所以你调用这个函数时,根本拿不到s的值,得到的s是默认初始化的(0,0),只有f是函数返回的正确值。
下面是几种正确返回多个Vector2f的方案:
方案1:用std::array返回固定数量的Vector2f
如果需要返回固定个数的Vector2f,std::array是最直接的选择:
#include <array> #include <SFML/System/Vector2.hpp> std::array<sf::Vector2f, 2> apple() { sf::Vector2f s(2,4); sf::Vector2f f(2,4); return {s, f}; }
调用方式:
auto result = apple(); sf::Vector2f s = result[0]; // s的值为(2,4) sf::Vector2f f = result[1]; // f的值为(2,4)
方案2:用std::pair返回两个Vector2f
如果只需要返回两个值,std::pair更轻量化:
#include <utility> #include <SFML/System/Vector2.hpp> std::pair<sf::Vector2f, sf::Vector2f> apple() { sf::Vector2f s(2,4); sf::Vector2f f(2,4); return {s, f}; }
调用方式(C++17及以上支持结构化绑定):
auto [s, f] = apple(); // 直接解构出s和f
老版本C++可以这么写:
auto result = apple(); sf::Vector2f s = result.first; sf::Vector2f f = result.second;
方案3:通过引用参数修改外部变量
如果不想返回容器/配对,也可以把变量作为引用传入函数,直接修改:
#include <SFML/System/Vector2.hpp> void apple(sf::Vector2f& s, sf::Vector2f& f) { s = sf::Vector2f(2,4); f = sf::Vector2f(2,4); }
调用方式:
sf::Vector2f s, f; apple(s, f); // 执行后s和f的值都为(2,4)
内容的提问来源于stack exchange,提问作者user18504606
相关产品推荐
相关产品推荐

