我有一个带有成员变量的类,它是一个std::vector<double>。我想在这个类的初始化列表中初始化这一点。我尝试了以下代码
MyClass::MyClass()
: m_myMemberVector( { 1.0, 2.0 } )
{...}但编译器将其解释为用于(itBegin, itEnd)的std::vector构造函数。我看到了这个问题error: ‘double’ is not a class, struct, or union type,它指出了输入迭代器的问题,但没有提供解决方案。
我在构造函数的主体中有一个使用BOOST的工作实现,但是如果可能的话,我宁愿在初始化列表中这样做。使用C++11风格的初始化,有什么优雅的方法可以构造包含两个双数的向量吗?
发布于 2014-08-29 13:38:05
std::initializer_list<double>{ 1.0, 2.0 }而不是{ 1.0, 2.0 }可能会工作,删除{ 1.0, 2.0 }周围的()也可能有效。
这很可能是您的编译器中的一个bug,因此,使事情更加明确可能会有帮助。
另一种可能是m_myMemberVector实际上不是std::vector<double>,或者您正在使用的标准库没有启用C++11。
发布于 2014-08-29 13:46:54
简单的解决方案是正确的: C++11没有被正确地启用。我看到了表单的编译器输出。
MyClass.cxx:5:5: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]并假定这意味着C++11支持将“默认启用”!使用-std=c++11的显式使用重新编译就像预期的那样工作。
有人回答说,这是我想接受的,但似乎已经被删除了。感谢大家对此发表的意见。
https://stackoverflow.com/questions/25569119
复制相似问题