find_if in set in C++:无法解析的重载函数类型

问题描述:

我已经使用find_if与列表和C++中的向量,它工作正常。但现在,当我尝试带套,我得到以下错误使用它:find_if in set in 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) 
} 

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

+0

不,我没有把这个包含在A类里面。如果我可能会问,为什么会超载 FranXh 2013-03-06 04:42:17

+0

如何声明'搜索(一个const&i)' – 2013-03-06 04:44:15

+0

这是一个可爱的方式来泄漏内存。指针是完全没有必要的。顺便说一句,[this](http://liveworkspace.org/code/3v0m5c%247)是密切合作的。 – chris 2013-03-06 04:45:03

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

+0

这就是我最初的想法。我试图改变函数的名字。还是一样的错误。 – FranXh 2013-03-06 04:42:55

+0

不,更改函数的名称可以修复该错误。你会得到另一个大错误,因为A需要一个比较运算符,就像其他人说的那样。 – 2013-03-06 04:50:46

+0

是更改名称解决了问题。 – FranXh 2013-03-06 04:51:29

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