1
我看過類似的問題,但我根本看不出什麼問題。 我試過:: const_iterator。但是gcc不會以任何方式進行編譯。標準:地圖不匹配運營商=
它是關於:i = allFunctions.erase(i);
void removeEventListener(const std::string &type, function listener){
if(!hasEventListener(type))
return;
std::map<int, std::list<function> > &allFunctions = eventHandlerList[type];
std::map<int, std::list<function > >::iterator i;
for(i=allFunctions.begin(); i!=allFunctions.end(); ++i)
{
i->second.remove(listener);
if(i->second.empty())
{
i = allFunctions.erase(i);
}
}
if(allFunctions.empty())
eventHandlerList.erase(type);
}
誤差常量性:
Error: passing const std::list<void (*)(const st::event::Event&)> as
this argument of void std::list<_Tp, _Alloc>::remove(const
value_type&) [with _Tp = void (*)(const st::event::Event&), _Alloc =
std::allocator<void (*)(const st::event::Event&)>, std::list<_Tp,
_Alloc>::value_type = void (*)(const st::event::Event&)] discards qualifiers [-fpermissive]
Error: no matching function for call to std::map<int, std::list<void
(*)(const st::event::Event&)> >::erase(std::map<int, std::list<void
(*)(const st::event::Event&)> >::const_iterator&)
誤差的迭代器:
no match for operator= in i = (& allFunctions)->std::map<_Key, _Tp, _Compare, _Alloc>::erase [with _Key = int, _Tp = std::list<void (*)(const st::event::Event&)>, _Compare = std::less<int>, _Alloc = std::allocator<std::pair<const int, std::list<void (*)(const st::event::Event&)> > >, std::map<_Key, _Tp, _Compare, _Alloc>::iterator = std::_Rb_tree_iterator<std::pair<const int, std::list<void (*)(const st::event::Event&)> > >](i)
有什麼建議?
什麼是eventHandlerList定義爲? –
std :: map >> eventHandlerList; 雖然函數是一個函數指針的typedef –
Sidar
這是在C++ 11嗎? –