STL错误:在C ++中对对象向量进行排序时使用删除的函数

时间:2018-06-22 20:16:10

标签: c++ sorting c++11 stl c++14

我有一个带有子视图私有向量的视图类

class MyView {

 private:
   const std::vector<MySubView> subViews_;
}

在子视图中,我有以下方法:

class MySubView {
  public:
    const Id getId() const {
        return id_;
    }
    const TimePoint getStartTime() const {
        return startTime_;
    }
  private:
    const Id id_;
    const TimePoint startTime_;

}

现在,在MyView的构造函数调用的方法之一中,我正在生成此子视图数组并对其进行设置,效果很好。当我尝试在分配之前对其进行排序时,就会出现问题。

static std::vector<MySubViews> buildLimitViews(
  const ViewData& data);

当我使用此方法构建向量后尝试对向量进行排序时。我看到错误了。排序是这里唯一不起作用的部分。

std::vector<MySubView> buildLimitViews(
  const ViewData& data) {
    std::vector<MySubView> subViews;
    //create views from data and push them in this vector, works fine.

    // this sort block below does not work, causes errors.
      std::sort(
          subViews.begin(),
          subViews.end(),
          [](const MySubView& lhs,
             const MySubView& rhs) {
            if (lhs.getStartTime() == rhs.getStartTime()) {
              return lhs.getId() < rhs.getId();
            }
            return lhs.getStartTime() < rhs.getStartTime();
          });

    return subViews;
 }

如果我注释掉排序块,则它可以正常工作,否则会出现此错误:

  

错误:使用已删除的功能'MySubView&   MySubView :: operator =(MySubView &&)'

1 个答案:

答案 0 :(得分:1)

具有const个非静态成员变量会中断分配,因为您无法对其进行修改。将subViews_设为非const,它应该可以正常工作。