我是C++新手,正在尝试使用sort()函数对Event对象数组进行排序。我重载了Event对象的〈运算符,但当使用sort()比较两个Event对象时,我得到了一个:没有匹配'operator〈'错误。
这里我重载了Event类型的〈操作符,它在比较两个事件时起作用。这是在我的Event类中:
bool Event::operator<(const Event &rhs) {
if (yearnum < rhs.year()) {
return true;
}
else if (yearnum == rhs.year() && monthnum < rhs.month()) {
return true;
}
else if (monthnum == rhs.month() && daynum < rhs.day()) {
return true;
}
else {
return false;
}
}
这就是我在Event.h中声明重载运算符的方式
bool operator<(const Event&);
我想让sort()在对未排序的Event向量进行排序时使用重载的〈运算符。“events”是Event类型的向量。在进行这种排序时,我一直得到:no match for 'operator〈' error.这是在我的Schedule.cc文件:
void Schedule::read(istream &in) {
string s;
while (in >> s) {
try {
Event e(s);
if (events.size() == 0) {
events.push_back(e);
}
else {
events.push_back(e);
sort(events.begin(), events.end(), [](const Event &lhs, const Event &rhs) {
return lhs < rhs; // this is where the error occurs.
});
}
}
catch(...) {
in.setstate(ios::failbit);
throw;
}
}
}
1条答案
按热度按时间myzjeezk1#
lhs
和rhs
都是对***const***对象的引用,正如你在这里看到的。您的
<
重载***不是***const
类方法。只能在const
对象上调用const
方法。顺便说一句,没有必要显式地将这个闭包传递给
std::sort
,一旦修复,<
重载应该足以完全自己完成这项工作。