Ошибка в функции sort()

160
13 января 2019, 15:30

Почему ошибку выдает?

class _listAffair : listAffair {
private:
    std::vector<_affair*> list;
public:
    _listAffair() { }
    bool sortP(_affair& right, _affair& left) {
        return right.getPriority() < left.getPriority();
    }
    bool sortT(_affair& right, _affair& left) {
        return right.getTime() < left.getTime();
    }
    virtual void addIn() {
        _affair *t = new _affair();
        list.push_back(t);
    }
    virtual void addIn(std::string _description) {
        _affair *t = new _affair(_description);
        list.push_back(t);
    }
    virtual void sortListPriority() {
        std::sort(list.begin(), list.end(), sortP);
    } // error
    virtual void sortListTime() {
        std::sort(list.begin(), list.end(), sortT);
    } // error
    virtual void changePriority(int index, int priority) {
        list[index]->changePriority(priority);
    }
    void getInfo() {
        int count = 0;
        for (auto i : list) {
            std::cout << count << ". " << i->getDescription() << " " << i->getTime() << std::endl;
            count++;
        }
    }
    virtual void deleteAffair(int index) {
        if (list[index] != nullptr) {
            delete list[index];
            while (list[index++] != nullptr)
                list[index - 1] = list[index];
        }
    }
    virtual ~_listAffair() {
        for (auto i : list) {
            if (i != nullptr)
                delete i;
        }
    }
};
Answer 1
  1. Методы sortP и sortT являются нестатическими функциями-членами класса и поэтому имеют скрытый параметр this. То есть у этих функций по три параметра, а предикат сравнения для сортировки должен иметь два параметра. Функции с тремя параметрами не могут использоваться в качестве предикатов сравнения для std::sort.

  2. Идентификаторы sortP и sortT сами по себе не является корректными выражениями в С++. Поэтому не ясно, что вы хотели сказать этим

    std::sort(list.begin(), list.end(), sortP);
    
  3. Если ваш вектор содержит указатели _affair *, то и ваши предикаты сравнения для сортировки такого вектора должны принимать _affair *. А у вас они почему-то принимают ссылки _affair &.

READ ALSO
Python в C++ коде

Python в C++ коде

Есть необходимость в написании пользовательских скриптов на Python в программе написанной на С++(QT MinGW-32bit)

167
Собранный проект не запускается в Qt5

Собранный проект не запускается в Qt5

Собрал проект в Qt510, сборщик mingw530_32

185
Не соединяется сигнал и слот

Не соединяется сигнал и слот

У класса QComboBox есть сигнал, и 2 перегрузки:

160
Как при профилировании в gprof получить файл gmon.out когда корректное завершение программы невозможно?

Как при профилировании в gprof получить файл gmon.out когда корректное завершение программы невозможно?

Осваиваю gprofУ меня есть многопоточное приложение, которое необходимо оптимизировать

157