我以前使用过 TDM-GCC-5.10,现在切换回 4.9 MINGW-GCC,尝试使用列表初始化时遇到了奇怪的错误:
class Vector2
{
public:
Vector2(float x, float y)
{
this->x = x;
this->y = y;
}
float x = 0.f;
float y = 0.f;
};
struct Test
{
int x = 0;
Vector2 v;
};
int main()
{
Test tst = {0,Vector2(0.0f,0.0f)}; //Error
return 0;
}
错误:
main.cpp: In function 'int main()':
main.cpp:21:41: error: could not convert '{0, Vector2(0.0f, 0.0f)}' from '<brace-enclosed initializer list>' to 'Test'
Test tst = {0,Vector2(0.0f,0.0f)}; //Error
^
我在两个编译器中都使用了 C++14。怎么了?
最佳答案
问题出在这里:
struct Test
{
int x = 0; // <==
Vector2 v;
};
直到最近,默认成员初始化器阻止类成为聚合,因此您不能对它们使用聚合初始化。 gcc 4.9 在这里仍然执行旧规则,而 gcc 5 使用新规则。
关于c++ - 无法将 {...} 从 <brace-enclosed initializer list> 转换为 struct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37776823/