我正在尝试一些带有c ++ 11的代码,
struct Data {};
struct B {
B(Data data) : m_data{data} {}
Data m_data{};
};
它抱怨错误:"数据"的初始值设定项过多
怎么了?
[更新] 谢谢大家,我的工具链配置有问题。
当您未在较旧的 GCC 编译器(默认为 c++03(中启用 c++11 模式或更高版本时,会出现该错误字符串。
main.cpp:4:31: error: too many initializers for 'Data' B(Data data) : m_data{data} {}
在这里看到它。尽管较新版本的 GCC 将为您提供更有用的诊断以启用 c++11 模式。
因此,只需添加到编译器调用中:
-std=c++11
这是正确的 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