在构造函数初始化列表中初始化std::vector数组

3
通常在编写构造函数时,我会尽可能在成员初始化列表中初始化尽可能多的类成员,包括诸如std::vector之类的容器。
class MyClass
{
  protected:
  std::vector<int> myvector;

  public:
  MyClass() : myvector(500, -1) {}
}

因为技术原因,我现在需要将这个拆分成向量数组。

class MyClass
{
  protected:
  std::vector<int> myvector[3];

  public:
  MyClass() : myvector[0](500, -1), myvector[1](250, -1), myvector[2](250, -1) {}
}

原来,我不能用这种方式初始化向量数组。我做错了什么?或者这不可能吗?
当然,我仍然可以在构造函数的主体中使用“assign”来完成,但我更喜欢在成员初始化列表中完成。
1个回答

3
你应该初始化整个数组,而不是每个元素。正确的数组初始化语法应该是:
MyClass() : myvector {std::vector<int>(500, -1), std::vector<int>(250, -1), std::vector<int>(250, -1)} {}

嗯...我收到了错误信息Error C2536:cannot specify explicit initializer for arrays。顺便说一下,这是MSVC2013。至于向量的内容,第一个应该用500个-1进行初始化,而最后两个应该分别用250个-1进行初始化。 - marcbf
@azrael 我在这里尝试了一下(http://rextester.com/OKJCI47855),它编译通过了。我不确定,可能是VS2013的一个bug。 - songyuanyao
@azrael 请尝试将花括号括号括起来,例如MyClass() : myvector({std::vector<int>(500, -1), std::vector<int>(250, -1), std::vector<int>(250, -1)}) {} - JFMR
@azrael 也许你需要多加一对花括号,参见:https://dev59.com/4njZa4cB1Zd3GeqPkPIK - JFMR
1
接受答案,因为这是正确的方式,即使我无法让它工作。 - marcbf
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接