Ошибка: выражение не может быть использовано как функция
Я новичок в 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;}
) для второго аргумента в другом конструкторе.