【发布时间】:2018-06-22 20:16:10
【问题描述】:
我有一个带有私有子视图向量的视图类
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&&)'
【问题讨论】:
-
你必须发布更多关于你的
MySubView的信息。发布完整的类定义是个好主意。问题出在MySubView的定义中,但它出在您尚未显示的内容中。 -
请将您的问题edit发送至minimal reproducible example 或SSCCE (Short, Self Contained, Correct Example)。我至少需要看到
MySubView的完整声明。 -
@AnT 更新了 MySubView,除了一些私有变量和 const getter 之外,没有太多内容。
-
constMySubView中的数据成员是问题所在。摆脱数据成员声明中的const并依赖基于方法的访问控制。
标签: c++ sorting c++11 stl c++14