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

C++ STL错误:在C+;中对对象向量排序时使用删除函数+;,c++,sorting,c++11,stl,c++14,C++,Sorting,C++11,Stl,C++14,我有一个视图类,它具有子视图的私有向量 class MyView { private: const std::vector<MySubView> subViews_; } 现在在MyView的构造函数调用的方法之一中,我生成了这个子视图数组并对其进行了设置,效果很好。当我在分配之前尝试对其进行排序时,问题就出现了 static std::vector<MySubViews> buildLimitViews( const ViewData& data

我有一个视图类,它具有子视图的私有向量

class MyView {

 private:
   const std::vector<MySubView> subViews_;
}
现在在MyView的构造函数调用的方法之一中,我生成了这个子视图数组并对其进行了设置,效果很好。当我在分配之前尝试对其进行排序时,问题就出现了

static std::vector<MySubViews> buildLimitViews(
  const ViewData& data);
static std::vector buildlimitview(
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;
 }
std::vector BuildLimitView(
常量视图(数据和数据){
std::向量子视图;
//从数据创建视图并将它们推送到这个向量中,效果很好。
//下面的排序块不起作用,导致错误。
排序(
子视图。开始(),
subViews.end(),
[](const MySubView和lhs,
const MySubView和rhs){
if(lhs.getStartTime()==rhs.getStartTime()){
返回lhs.getId()
如果我注释掉排序块,它工作正常,否则我会看到以下错误:

错误:使用已删除的函数“MySubView”& MySubView::operator=(MySubView&&)'


拥有
const
非静态成员变量会中断赋值,因为您无法修改它们。创建
子视图
常量
,它应该可以工作。

你必须发布更多关于你的
MySubView
的信息。发布完整的类定义是一个好主意。问题出在
MySubView
的定义中,但问题出在您尚未显示的内容中。请使用or来回答您的问题。我至少需要看一下
MySubView
@AnT更新的MySubView的完整声明,除了很少的私有变量和常量getter之外,没有太多。问题在于
MySubView
中的
const
数据成员。摆脱数据成员声明中的
const
,依赖基于方法的访问控制。OP不是对
子视图进行排序,而是对非const函数local
子视图进行排序。啊,没错。我仍然猜测他的MySubView类对const成员做了同样的事情(但目前这只是一个猜测)。我尝试从(const MySubView&lhs,const MySubView&rhs)中删除const,但得到了相同的错误。如果MySubView中有任何const非静态成员变量(或者有作为引用的成员变量),移除常数。常量成员函数或以常量引用为参数的函数都可以。
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;
 }