Имею такие методы:
const bool Date::compare_dates(const Date &d1, const Date &d2) const {
return d1 < d2;
}
void Date::sort_dates(Date *dates, const int &num) const {
std::sort(dates[0], dates[num - 1], compare_dates);
}
В месте вызова compare_dates возникает еррор:
Reference to non-static member function must be called
Как это понимать?
class Date
{
//...
static bool compare_dates(const Date &d1, const Date &d2) const;
//...
};
Вызов:
void Date::sort_dates(Date *dates, const int &num) const
{
std::sort(dates[0], dates[num - 1], Date::compare_dates);
}
Это означает, что просто compare_dates
является некорректным синтаксисом в С++. Имя метода класса может использоваться только в ограниченном наборе синтаксических контекстов, вроде вызова метода класса, взятия адреса метода класса и т.п. У вас же просто ни с того ни с сего в списке аргументов болтается одинокое compare_dates
. Что это?
Отдельно непонятно, почему вы пытаетесь передавать dates[0]
и dates[num - 1]
в списке аргументов. Если ваша задача - отсортировать массив dates
, то можно предположить, что передавать надо dates
и dates + num
... И почему у вас вдруг стало num - 1
? И зачем вы сделали передачу num
по ссылке?
Ну и самое главное, почему-то до сих пор не упомянутое в ответах: если у вас уже определен оператор сравнения <
для класса Date
, то зачем вам вообще понадобился этот метод compare_dates
? Никакой необходимости в этом compare_dates
нет. Просто пишите
std::sort(dates, dates + num);
ошибки:
Я пытался показать как нужно поступать вообше, а для вашего случая компаратор и не нужен вовсе. Если он у вас сравнивает два обьекта этого же типа,то у вас определен оператор меньше, и стандартный альгоритм без компаратора именно так и сравнит.
Выходит вам нужно убрать Date::compare_dates и не передавать альгоритму компаратор:
void Date::sort_dates(Date *dates, const int &num) const
{
std::sort(dates[0], dates[num - 1]);
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Имеется orthanc-server и проект на C++ с использованием Grassroots DICOMНа сервере имеется запись instance c Text Value Attribute(0040,A160)
Задали сделать игру Кто хочет стать миллионеромВесь код прописал , сделал вопросы , подсказки
Необходимо создать аналог Марио, желательно не использовать ничего кроме winapi и c++Возникла проблема при отрисовке текстур
В общем, картина следующая: у меня есть окно создания имени для персонажа и мне нужно решить 2 проблемы с которыми я столкнулся