迭代我的对象停止工作

时间:2011-12-20 09:53:56

标签: c++ map iterator

由于某种原因,此代码会抛出错误

// map<int, AnItem> roomlist;
// map<string, long> rinventory

map<int, AnItem>::iterator it;

for ( it = roomlist[roomno].rinventory.beg/in(); it != roomlist[roomno].rinventory.end(); it++ )    {

        if( (*it).second.name == "Stock" )
            tmpitem.append( strmug );
    }

if statment抛出错误。它真的不那么复杂,我认为我可以处理这个问题。所以... roomlist是一张地图,roomno是一个整数,rinventory是一张地图

class AnThing   {

public:
    AnThing();              // constructor
    string name;                // name reference
    int gtid;               // Thing ID
    string lcname;              // name in lowercase
    string m_name;
};

class AnItem : public AnThing   {

public:

    ItemType m_type;
    int imin;
    int imax;
    int ispeed;
    long unsigned iprice;
    unsigned int ecoin;
    GAttributes m_attributes;

    AnItem(); //Constructs an item with "invalid" values

    int& Min(); // Returns the min attribute
    int& Max(); // Returns the max attribute
    int& Speed(); // Returns the speed attribute

};

提前致谢!我将追加下面的错误(有两个)

  

c:\ ucdhb2 \ gaia \ logonserver \ v6 \ gaiaserver.cpp(812):错误C2679:   binary'=':找不到带右手操作数的运算符   输入'std :: _ Tree&lt; _Traits&gt; :: iterator'(或者没有可接受的   转换)1>用1> [1>   _Traits =标准:: _ Tmap_traits,性病::分配器&GT;,假&gt; 1 GT; ] 1&gt; C:\程序   files \ microsoft visual studio 9.0 \ vc \ include \ xtree(498):可能是   “的std :: _树&LT; _Traits&GT; ::迭代   &amp; std :: _ Tree&lt; _Traits&gt; :: iterator :: operator =(const   std :: _ Tree&lt; _Traits&gt; :: iterator&amp;)'1&gt;用1> [1>   _Traits =标准:: _ Tmap_traits,性病::分配器&GT;,假&gt; 1 GT; ] 1&gt;而试图匹配   参数列表'(std :: _ Tree&lt; _Traits&gt; :: iterator,   std :: _ Tree&lt; _Traits&gt; :: iterator)'1&gt;用1> [1>   _Traits =标准:: _ Tmap_traits,性病::分配器&GT;,假&gt; 1 GT; ] 1&gt;和1> [1>   _Traits =标准:: _ Tmap_traits,性病::分配器&GT;,假&gt; 1 GT; ]   1&gt; c:\ ucdhb2 \ gaia \ logonserver \ v6 \ gaiaserver.cpp(812):错误C2678:   binary'!=':找不到带左手操作数的运算符   输入'std :: _ Tree&lt; _Traits&gt; :: iterator'(或者没有可接受的   转换)1>用1> [1>   _Traits =标准:: _ Tmap_traits,性病::分配器&GT;,假&gt; 1 GT; ] 1&gt; c:\ program files \ microsoft   sdks \ windows \ v6.0a \ include \ guiddef.h(197):可能是'int运算符   !=(const GUID&amp;,const GUID&amp;)'1&gt; c:\ program files \ microsoft   visual studio 9.0 \ vc \ include \ xtree(314):或'bool   std :: _ Tree&lt; _Traits&gt; :: const_iterator :: operator!=(const   std :: _ Tree&lt; _Traits&gt; :: const_iterator&amp;)const'1&gt; 1 >>   [1>   _Traits =标准:: _ Tmap_traits,性病::分配器&GT;,假&gt; 1 GT; ] 1&gt;而试图匹配   参数列表'(std :: _ Tree&lt; _Traits&gt; :: iterator,   std :: _ Tree&lt; _Traits&gt; :: iterator)'1&gt;用1> [1>   _Traits =标准:: _ Tmap_traits,性病::分配器&GT;,假&gt; 1 GT; ] 1&gt;和1> [1>   _Traits =标准:: _ Tmap_traits,性病::分配器&GT;,假&gt; 1 GT; ]

1 个答案:

答案 0 :(得分:2)

你的迭代器

map<int, AnItem>::iterator it;

需要是

类型
map<string, long>::iterator it;

根据您的评论(即您正在迭代rinventory,而不是roomlist)。