STL映射迭代器复制问题

时间:2010-10-27 05:31:04

标签: c++ stl map iterator

我有一个我想迭代的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,导致错误。我只是在读我自己的代码做得很糟糕。谢谢你们!

2 个答案:

答案 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()'

不查看您提供的代码的错误消息。
请剪切并通过代码。否则就没有意义了。