代码之家  ›  专栏  ›  技术社区  ›  schorsch312

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

  •  2
  • schorsch312  · 技术社区  · 6 年前

    我有一个这样的容器类

    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}};
    

    使用“英特尔编译器”(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 回复  |  直到 6 年前
        1
  •  2
  •   Mr.C64    6 年前

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

    我认为您只是遇到了一个编译器错误。我建议将您的C++编译器升级到具有更好现代C++支持的更新版本。

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