2017-12-28 5 views
0

によって受け入れられないジェネリック上で動作します次のコンパイルエラー(G ++、C++ 14):はファンクタは、私たちは、コードの次のセクションを見てみましょうfind_if

error: no matching function for call to 'find_if(std::vector<int>::iterator,std::vector<int>::iterator,const int&,MyClass<int,bool(*)(int,int)>::my_functor) 

Tがでありますこの特定の例ではである。

ここで問題と思われるものは何ですか?

PS:必要なすべてのヘッダーが含まれています(アルゴリズム、ベクトル、機能など)。問題はありません。

+3

'、v'はここで行うべきことがあります。 'find_if'は範囲とファンクタをとります。 – Quentin

+0

_ "ファンクタはテンプレートなしでうまく動作しますT" _私はそれを非常に疑っています。そうであれば、比較する値と述語の両方を渡しながらコンパイルするこの神話コードを表示します。 –

+0

@underscore_dテンプレート化されていないバージョンを試していたときにvを除外するようにしましたが、テンプレート版では何らかの理由で除外しなかったのでうまくいきました。私の(非常にばかげた)間違い、申し訳ありません。編集されました。 –

答えて

2

ここで問題と思われるものはありますか?

このコードが正常に動作するとは思っていません。

まず、std::find_ifの過負荷をチェックする必要があります。検索する値とカスタム述部の両方を受け入れる過負荷はなく、述部だけが受け入れられます。あなたがmy_functorを使用する場合

次に、コードは次のようになります。

TCompはいくつかの種類があり
std::find_if(std::cbegin(container), std::cend(container), 
    MyClass<T, Comp>::my_functor(v)); 

+0

Rokyanああ、ありがとう!私は自分自身を助けることはできませんが、この間違いで正会りをすることはできませんでした。私は最初にノーマル・ファインドを使用していましたが、それはもうvを取らないことに気付かずにfind_ifに移行しました。それは今hehe働いている。 –

+0

@ P.Lance問題ありません:) –