如何初始化const std :: vector <myclass>

时间:2018-05-07 14:17:58

标签: c++ const stdvector initializer-list

我有一个像这样的容器类

class Container {
  public:
    Container(const std::string name, const double value)
        : name(name), value(value),{};
    const std::string name;
    const double value;
};

我喜欢初始化const std::vector<Container>

const std::vector<Container> sets{{"foo", 0}, {"bar", 1}};

使用intel编译器(版本15.0.3(gcc版本4.8.2兼容性))和c ++ 11启用(-std=c++11)可以正常使用RedHat6,但它在Windows7下失败。编译器是完全相同的,但前端是visual studio 2013。

我收到错误消息:

 no operator "=" matches these operands
           operand types are: Container = Container
           _Right = _Move(_Tmp);

我是否需要编写自己的复制构造函数?

完整的例子是

#include <vector>
#include <string>

class Container {
  public:
    Container(const std::string name, const double value) : name(name), value(value){};
    const std::string name;
    const double value;
};

int main() {
    const std::vector<Container> sets{{"foo", 0.0},{"bar", 1.0}};
}

1 个答案:

答案 0 :(得分:2)

我尝试使用VS2015编译你的代码,它编译得很好。

我认为你只是遇到编译器错误。我建议将C ++编译器升级到更新版本,并提供更好的现代C ++支持。

P.S。请注意,VS2015也支持Windows 7.