C ++ functor / predicate编译时错误 - std :: sort调用导致“找不到标识符”

时间:2015-09-10 04:43:04

标签: c++ sorting predicate functor

在条款之间处理个人项目并完全陷入困境。任何帮助表示赞赏。我的任何一本书都没有涵盖这些内容,因此我搜索了帮助文档,发现了谓词,然后在线搜索了如何使用第三个参数进行排序。第三个参数不会编译。我也试过这样做是一个免费的函数,它也不能编译,但这是我能得到的尽可能接近。

编译时错误“未找到标识符”在下面的评论中注明。我也省略了大量的代码;如果我注释掉一行,那么我没有错误,并且每个其他方法调用和功能都正常工作,包括使用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();
}

0 个答案:

没有答案