首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用C++11风格初始化这个成员向量?

如何用C++11风格初始化这个成员向量?
EN

Stack Overflow用户
提问于 2014-08-29 13:18:10
回答 2查看 164关注 0票数 1

我有一个带有成员变量的类,它是一个std::vector<double>。我想在这个类的初始化列表中初始化这一点。我尝试了以下代码

代码语言:javascript
复制
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风格的初始化,有什么优雅的方法可以构造包含两个双数的向量吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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。

票数 2
EN

Stack Overflow用户

发布于 2014-08-29 13:46:54

简单的解决方案是正确的: C++11没有被正确地启用。我看到了表单的编译器输出。

代码语言:javascript
复制
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的显式使用重新编译就像预期的那样工作。

有人回答说,这是我想接受的,但似乎已经被删除了。感谢大家对此发表的意见。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25569119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档