c++ - 无法将 {...} 从 <brace-enclosed initializer list> 转换为 struct

标签 c++ gcc struct initialization

我以前使用过 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/

相关文章:

使用复制构造函数时 C++ 程序崩溃,动态内存可能是罪魁祸首?

c++ - 在 Visual Studio C++ 中检测真正的编译错误

c++ - 如何检查回文列表

memory - GCC 对读/写指令的重新排序

c - 存储在全局链表中(并在其他函数中访问)的本地结构在 VC2010 中有效。这是正确的 C99/ANSI 吗?

c++ - 反复读写交替

c++ - 使用元编程的私有(private)成员存在性测试,GCC vs clang,哪个是对的?

c - PostgreSQL 模块 - 如何将参数数组映射到函数中?

struct - 如何将 Julia 结构完全解压缩到局部变量中?

c - 在函数中传递结构体