在C ++中的set中的find_if:未解析的重载函数类型

时间:2013-03-06 04:34:41

标签: c++ set stdset

我之前使用过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)
}

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

有多个名为search的函数 - 名称已重载。要将指向search的指针传递到find_if,您需要指定哪一个。最直接的方法是指定static_cast< bool (*)( A ) >( cont )