在条款之间处理个人项目并完全陷入困境。任何帮助表示赞赏。我的任何一本书都没有涵盖这些内容,因此我搜索了帮助文档,发现了谓词,然后在线搜索了如何使用第三个参数进行排序。第三个参数不会编译。我也试过这样做是一个免费的函数,它也不能编译,但这是我能得到的尽可能接近。
编译时错误“未找到标识符”在下面的评论中注明。我也省略了大量的代码;如果我注释掉一行,那么我没有错误,并且每个其他方法调用和功能都正常工作,包括使用list.sort()调用,它使用重写的全局运算符<()我相信。
class StudyCategory
{
private:
std::string label;
std::list<StudyItem> studyItems;
public:
// Constructors etc. omitted
void sortByStartDate();
void sortByEndDate();
};
/*
***** Compile time error "GreaterEndDate identifier not found" ****
*/
void StudyCategory::sortByEndDate()
{
std::sort(studyItems.begin(), studyItems.end(), GreaterEndDate());
}
我在同一个文件中包含了以下谓词函数,在我的所有文档中,它似乎都是正确的并且编译正常:
class GreaterEndDate
{
public:
bool operator() (const StudyItem& a, const StudyItem& b) const
{
return a.getEndDate() < b.getEndDate();
}
};
并且StudyItem类重载了设置为类的朋友的比较运算符。这可能不完美,但这就是我正在使用的教科书的工作原理。
class StudyItem
{
private:
int startDate, endDate;
public:
int getStartDate() const;
int getEndDate() const;
void setStartDate(int date);
void setEndDate(int date);
// Overloaded operators
friend bool operator==(StudyItem a, StudyItem b);
friend bool operator<(StudyItem a, StudyItem b);
friend bool operator>(StudyItem a, StudyItem b);
};
// Friend functions - operator overrides
bool operator==(StudyItem a, StudyItem b)
{
return a.getStartDate() == a.getStartDate();
}
bool operator<(StudyItem a, StudyItem b)
{
return a.getStartDate() < a.getStartDate();
}
bool operator>(StudyItem a, StudyItem b)
{
return a.getStartDate() > a.getStartDate();
}