【问题标题】:How to initialize const std::vector<MyClass>如何初始化 const std::vector<MyClass>
【发布时间】:2018-10-17 09:23:00
【问题描述】:

我有一个这样的容器类

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&lt;Container&gt;

这个

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

【问题讨论】:

  • 你在 windows 7 上使用什么编译器?
  • 尝试显式默认复制分配并删除移动分配。 (也许还有构造函数)。

标签: c++ constants stdvector initializer-list


【解决方案1】:

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

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

附:请注意,VS2015 也支持 Windows 7。

【讨论】:

  • 我会向我们的 IT 提出建议。
  • @schorsch312 我很高兴能帮上忙。祝你的项目好运。
猜你喜欢
  • 2019-01-16
  • 2010-09-18
  • 2010-11-16
  • 2013-06-06
  • 1970-01-01
  • 2016-07-30
  • 2013-07-13
  • 2012-06-09
  • 1970-01-01
相关资源
最近更新 更多