我有一个带有子视图私有向量的视图类
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 &&)'
答案 0 :(得分:1)
具有const
个非静态成员变量会中断分配,因为您无法对其进行修改。将subViews_
设为非const
,它应该可以正常工作。