0
有VS 2005下用STL的問題,我只限於2005年VS的for_each bind2nd mem_fun 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 < _result,_Ty,_Arg >的std :: mem_fun(結果( _thiscall _Ty :: *)(_ ARG)常量)」:
不能推導出模板參數 '結果( _thiscall _Ty :: *)(_ ARG)常量'
從 '無效(__thiscall INGSpeedTest :: *)(常量性病::對< _Ty1,_Ty2> &,常量的std :: string &)'
with
[
_Ty1=std::string,
_Ty2=double
]
如果我有用於替換的for_each loop
for (dataIter = beginIter;
dataIter != endIter;
++dataIter)
{
AddDataPair(*dataIter, insertName);
}
它編譯得很好。 但我仍然想知道什麼是for_each失敗。
非常感謝你的任何時間,知識和精力,你能饒了我吧,
羅伯特
嘆...要學會仔細閱讀。好的,所以我切換到ptr_fun並得到或多或少相同的錯誤(仍然是C2784,但是不同的文本) – Robert
'ptr_fun'只適用於非成員或靜態成員函數。你的是一個非靜態成員函數。 –
而使它成爲靜態函數的唯一方法是傳入_Data,這會給它3個參數......所以在VS2005下沒有運氣,非常感謝您的時間。 – Robert