-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— 名前がオーバーロードされています。へのポインタを に渡すには、searchどれfind_ifを指定する必要があります。最も簡単な方法は、 を指定することstatic_cast< bool (*)( A ) >( cont )です。

于 2013-03-06T06:17:07.313 に答える