我正在尝试使用c ++ 11的一些代码,
struct Data {};
struct B {
B(Data data) : m_data{data} {}
Data m_data{};
};
它抱怨道
错误:“数据”的初始化程序太多
出了什么问题?
[更新]谢谢大家,我的工具链配置有问题。
答案 0 :(得分:3)
如果在较旧的GCC编译器(默认为c ++ 03)中未启用c ++ 11模式或更高版本,则会收到该错误字符串。
main.cpp:4:31: error: too many initializers for 'Data' B(Data data) : m_data{data} {}
见here。虽然较新版本的GCC将为您提供更有用的诊断功能,以启用c ++ 11模式。
所以,只需添加到编译器调用:
-std=c++11
答案 1 :(得分:0)
这是正确的c ++ 11,但也许你没有在C ++ 11模式下编译。
许多编译器仍默认为C ++ 98,您通常需要激活命令行开关(或IDE中的选项)以启用C ++ 11语法。
我已在您的代码中添加了一个小主编:
int main()
{
Data d;
B b(d);
}
...如果我在命令行中添加它,它会用gcc 5.x和clang 802(xcode 8版本)编译清理:
-std = C ++ 11