Ошибка: выражение не может быть использовано как функция

Я новичок в lambdas, я сделал свой собственный класс двоичной кучи с пользовательской функцией компаратора. Все шло хорошо, пока я не получил ошибку компиляции, и я не знаю, как исправить.

Я попытался немного изменить мою строку кода вместо

this(capacity, [](int a, int b){return a - b;});

Я изменил на это:

function<int(int, int)> cmp = [](int a, int b){return a - b;};
this(capacity, cmp);

Я получил тот же результат. Как бороться с этой ошибкой?

класс двоичной кучи:

class binaryheap
{
private:
    int *heap;
    int size;
    int capacity;
    function<int(int, int)> cmp;
    int parent(int i);
    int left_child(int i);
    int right_child(int i);
    void swap(int *a, int *b);
    void heapify(int i);
public:
    binaryheap(int capacity);
    binaryheap(int capacity, const function<int(int, int)>& cmp);
    ~binaryheap();
    bool empty();
    int heap_size() const;
    int get_root() const;
    int extract_root();
    void decrease_key(int i, int value);
    void insert_key(int key);
    void delete_key(int i);
};

Часть моего кода с ошибкой компиляции

binaryheap::binaryheap(int capacity)
{
    this(capacity, [](int a, int b){return a - b;});//binaryheap.cpp:51:58: error: expression cannot be used as a function
}

binaryheap::binaryheap(int capacity, const function<int(int, int)>& cmp)
{
    this->capacity = capacity;
    this->heap = new int[capacity + 1];
    this->size = 0;
    this->cmp = cmp;
}

1 ответ

Решение

Я полагаю, вы хотите использовать функцию делегирования конструктора; так

 binaryheap::binaryheap (int capacity)
     : binaryheap{capacity, [](int a, int b){return a - b;}}
  { }

или, как предлагает melpomene (спасибо), вы можете удалить этот конструктор и добавить значение по умолчанию ([](int a, int b){return a - b;}) для второго аргумента в другом конструкторе.

Другие вопросы по тегам