C++编译报错cannot convert from 'initializer list' to 'Vector2'求助
根因定位
你遇到的cannot convert from 'initializer list' to 'Vector2'报错核心原因是:你自定义的Vector2结构体没有显式定义接收两个float参数的构造函数。
你当前的Vector2属于C++聚合类型,仅支持花括号形式的聚合初始化,不支持你写的Vector2(newAngle.x, newAngle.y)这种括号形式的构造函数调用,你之前误以为的"两个float参数的初始化逻辑"实际是运算符重载的实现,和构造函数无关。
解决方案
你可以任选以下一种方案解决问题:
- 方案1:修改初始化语法为聚合初始化形式,直接替换报错行代码为:
pLocal.setViewAngles(Vector2{newAngle.x, newAngle.y});
如果setViewAngles的形参明确是Vector2类型,还可以进一步简化为:
pLocal.setViewAngles({newAngle.x, newAngle.y});
- 方案2:给
Vector2结构体添加对应的构造函数,在Vector2的成员定义最开头加入以下代码即可:
struct Vector2 { float x, y; // 新增构造函数 Vector2() = default; // 保留默认无参构造 Vector2(float x_, float y_) : x(x_), y(y_) {} // 双参数构造 // 原有运算符重载、成员函数保留不变 // ... };
加完之后你原来的Vector2(newAngle.x, newAngle.y)写法就可以正常编译了。
- 方案3:如果不想改Vector2定义也不想改初始化写法,还可以临时构造一个Vector2变量再传参:
Vector2 angle; angle.x = newAngle.x; angle.y = newAngle.y; pLocal.setViewAngles(angle);
额外注意
同理你的Vector3结构体现在也没有自定义构造函数,如果你之后用到括号形式的Vector3构造,也要按上面的逻辑补充对应参数的构造函数。
内容的提问来源于stack exchange,提问作者God Speed
相关产品推荐
相关产品推荐

