我有一个我想迭代的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 ;
}
我得到的错误信息是:
错误:'iter =(((const std :: map&lt; std :: string,PowerupInfo,std :: less&lt; std :: string&gt;,std :: allocator&lt; std:'中的'operator ='不匹配:pair&lt; const std :: string,PowerupInfo&gt;&gt;&gt; )((const PowerupList )this))+ 24u) - &gt; std :: map&lt; _Key,_Tp,_Compare,_Alloc&gt; ::以_Key = std :: string开头,_Tp = PowerupInfo,_Compare = std :: less&lt; std :: string&gt;,_ Alloc = std :: allocator&lt; std :: pair&lt; const std :: string,PowerupInfo&gt; &GT;'| 注意:候选者是:std :: _ Rb_tree_iterator&lt; std :: pair&lt; const std :: string,PowerupInfo&gt; &GT;&安培; std :: _ Rb_tree_iterator&lt; std :: pair&lt; const std :: string,PowerupInfo&gt; &gt; :: operator =(const std :: _ Rb_tree_iterator&lt; std :: pair&lt; const std :: string,PowerupInfo&gt;&gt;&amp;)|
所以我通常认为问题与设置iter等于它不喜欢的东西有关,因为它找不到'operator ='的匹配。但为什么?为什么这项任务不起作用?
编辑:
结果是WAS const方法,导致对powerups的引用也是const,导致错误。我只是在读我自己的代码做得很糟糕。谢谢你们!
答案 0 :(得分:3)
您的地图名称为poweruplist
而非powerups
(您在for
循环中使用此名称)。如果这不是错误的原因,那么看起来你是for
循环是在一个函数中,它通过const引用接受映射(或者是类的const成员函数)。在这种情况下,您的迭代器类型应为const_iterator
而不是iterator
。
答案 1 :(得分:1)
重新格式化错误代码以使其可读:
error: no match for 'operator=' in
'iter =
((
(const std::map<std::string, PowerupInfo>*)((const PowerupList*)this)
)
+ 24u
)->std::map<std::string, PowerupInfo>::begin()'
不查看您提供的代码的错误消息。
请剪切并通过代码。否则就没有意义了。