Я использовал 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)
}
Может кто-нибудь помочь мне понять, в чем проблема?
В STL уже есть функция search
, Вероятно, поэтому компилятор не может определить правильное имя без лучшей подсказки. Вы можете переименовать вашу функцию поиска. Или, если вы не хотите этого делать, попробуйте ::search
в find_if
вместо.
Существует более одной функции с именем search
— имя перегружено. Чтобы передать указатель на search
в find_if
, вам нужно указать, какой именно. Самый простой способ — указать static_cast< bool (*)( A ) >( cont )
,