宿題の一部として、マップ内の各文字のオカレンスをマップすることになっています。私たちの関数はstd :: for_eachを使い、評価対象の文字を渡すことになっています。STL for_each引数リストについて文句を言う
std::for_each(document_.begin(),
document_.end(),
std::mem_fun(&CharStatistics::fillMap));
document_
がstring
あり、かつfillMap機能がstd::map<char, unsigned int> chars_;
として宣言され
void CharStatistics::fillMap(char ch)
{
ch = tolower(ch);
++chars_.find(ch)->second;
}
chars_
ように定義されています
私の関数です。
私は、これは動作するはず把握、私は引数リスト
_Fn1=std::mem_fun1_t<void,CharStatistics,char>,
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Alloc=std::allocator<char>,
1> _Result=void,
1> _Ty=CharStatistics,
1> _Arg=char,
1> _InIt=std::_String_iterator<char,std::char_traits<char>,std::allocator<char>>
を見たとき、それは私には正常に見えるため、コンパイラは、私を混乱させる
error C2064: term does not evaluate to a function taking 1 arguments
を不平を言っています。 _Elemはcharで、私の関数はcharを受け入れます。イテレータは他にはありません。char *
私は間違っていますか?
bind2ndは何が書かれていることは、ブースト::バインドまたはのstd ::バインド(新規格)構築物である、ことをしないだろうし。 bind2ndは関数とパラメータの2つのパラメータしか取らないので、コンパイルエラーが発生します。 – CashCow
@CashCow:ああ、あなたは正しい。私はいつも 'boost :: bind'を使います。編集されました。 –