2013-03-06 78 views
-1

我已經使用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類裏面。如果我可能會問,爲什麼會超載<影響find_if? – 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

回答

1

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

1

有多個函數名爲search - 名稱被重載。要將指針search傳遞到find_if,您需要指定哪一個。最直接的方法是指定static_cast< bool (*)(A) >(cont)