find_if в наборе в C ++: неразрешенный тип перегруженной функции

Я использовал find_if раньше со списками и векторами в C ++, и он работал нормально. Но теперь, когда я пытаюсь использовать его с наборами, я получаю следующую ошибку:

 error: no matching function for call to ‘find_if(std::set<A, Acmp>::iterator,
std::set<A, Acmp>::iterator, <unresolved overloaded function type>)’|

Мой класс следующий:

bool searchForA(A i) {
return (i.getVal() > 0);
}void B::findA()
{
set<A, Acmp> cont;
set<A, Acmp>::iterator it;
A *a1 = new A(5);
A *a2 = new A(7);
cont.insert(*a1);
cont.insert(*a2);

it = find_if (cont.begin(), cont.end(), search)
}

Может кто-нибудь помочь мне понять, в чем проблема?

-1

Решение

В STL уже есть функция search, Вероятно, поэтому компилятор не может определить правильное имя без лучшей подсказки. Вы можете переименовать вашу функцию поиска. Или, если вы не хотите этого делать, попробуйте ::search в find_if вместо.

1

Другие решения

Существует более одной функции с именем search — имя перегружено. Чтобы передать указатель на search в find_if, вам нужно указать, какой именно. Самый простой способ — указать static_cast< bool (*)( A ) >( cont ),

1

По вопросам рекламы [email protected]