在VS 2005下遇到STL问题。我受限于VS 2005。
class SpeedTest
{
public:
void AddDataPair(const std::pair<std::string, double> & datum, const std::string & insertName = "");
private:
std::map <std::string, double> _Data;
}
void SpeedTest::AddDataPair(const pair<string, double> & datum, const string & insertName)
{
string key = insertName + '_' + datum.first;
_Data[key] += datum.second;
}
void SpeedTest::Insert(SpeedTest * toCopy, const string & insertName)
{
map<string, double>::iterator dataIter;
map<string, double>::iterator beginIter = toCopy->_Data.begin();
map<string, double>::iterator endIter = toCopy->_Data.end();
for_each
(
beginIter,
endIter,
bind2nd(mem_fun(&INGSpeedTest::AddDataPair)(), insertName)
);
}
我收到错误C2784:
“的std :: const_mem_fun1_t&LT; _result,_Ty,_Arg&GT; std :: mem_fun(结果( _thiscall _Ty :: *)(_ Arg)const)':
无法推断出'结果( _thiscall _Ty :: *)(_ Arg)const'的模板参数
来自'void(__thiscall INGSpeedTest :: *)(const std :: pair&lt; _Ty1,_Ty2&gt;&amp;,const std :: string&amp;)'
with
[
_Ty1=std::string,
_Ty2=double
]
如果我用for循环替换for_each
for (dataIter = beginIter;
dataIter != endIter;
++dataIter)
{
AddDataPair(*dataIter, insertName);
}
编译得很好。 但是我仍然想知道for_each失败了什么。
非常感谢您随时随地为我提供的知识和努力,
罗伯特
答案 0 :(得分:1)
std::mem_fun
只能包含一个带零或一个参数的成员函数。你需要两个。