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