我有一个 STL 映射,我想遍历它,但似乎无法使代码工作。代码是:
//PowerupInfo is a struct defined in this class's header file
std::map<std::string, PowerupInfo> powerups;
...populate powerups
std::map<std::string, PowerupInfo>::iterator iter;
for (iter = powerups.begin(); iter != powerups.end(); iter++) {
return iter->second.type ;
}
我得到的错误信息是:
error: no match for 'operator=' in 'iter = (((const std::map<std::string, PowerupInfo, std::less<std::string>, std::allocator<std::pair<const std::string, PowerupInfo> > >)((const PowerupList)this)) + 24u)->std::map<_Key, _Tp, _Compare, _Alloc>::begin with _Key = std::string, _Tp = PowerupInfo, _Compare = std::less<std::string>, _Alloc = std::allocator<std::pair<const std::string, PowerupInfo> >'| note: candidates are: std::_Rb_tree_iterator<std::pair<const std::string, PowerupInfo> >& std::_Rb_tree_iterator<std::pair<const std::string, PowerupInfo> >::operator=(const std::_Rb_tree_iterator<std::pair<const std::string, PowerupInfo> >&)|
所以我通常认为问题与将 iter 设置为它不喜欢的值有关,因为它没有找到“operator=”的匹配项。但为什么?为什么该作业不起作用?
编辑:
结果是方法 WAS const,导致对 powerups 的引用也是 const,从而导致错误。我只是在阅读自己的代码时做得很糟糕。谢谢大家!
最佳答案
您的 map 名称是 poweruplist
而不是 powerups
(您在 for
循环中使用了这个名称)。如果这不是错误的原因,那么看起来你是 for
循环在一个通过 const 引用接受映射的函数中(或者是一个类的 const 成员函数)。在这种情况下,您的迭代器类型应该是 const_iterator
而不是 iterator
。
关于c++ - STL map 迭代器复制问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4030237/