-1

我之前在 C++ 中将 find_if 与列表和向量一起使用过,它运行良好。但是现在,当我尝试将它与集合一起使用时,我收到以下错误:

 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)
}

谁能帮我理解问题出在哪里?

4

2 回答 2

1

STL 中已经有一个名为search. 这可能就是编译器在没有更好提示的情况下无法解析正确名称的原因。您可以重命名搜索功能。或者,如果您不想这样做,请尝试::search传入find_if

于 2013-03-06T04:42:15.830 回答
1

命名的函数不止一个search——名称被重载。要将指针传递到searchinto find_if,您需要指定哪个。最直接的方法是指定static_cast< bool (*)( A ) >( cont ).

于 2013-03-06T06:17:07.313 回答