作为家庭作业的一部分,我们应该在地图中映射每个字符的出现。我们的函数应该使用 std::for_each 并传入要评估的字符。
我的功能是:
std::for_each(document_.begin(),
document_.end(),
std::mem_fun(&CharStatistics::fillMap));
document_
是 a string
,而 fillMap 函数的定义如下
void CharStatistics::fillMap(char ch)
{
ch = tolower(ch);
++chars_.find(ch)->second;
}
chars_
被声明为std::map<char, unsigned int> chars_;
。
我认为这应该可以,但是编译器在抱怨
error C2064: term does not evaluate to a function taking 1 arguments
这让我感到困惑,因为当我查看参数列表时
_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>>
对我来说看起来不错。_Elem 是一个字符,我的函数接受一个字符。迭代器只不过是一个char *
我究竟做错了什么?