【问题标题】:Iterating with my object stopped working用我的对象迭代停止工作
【发布时间】:2012-01-24 07:23:29
【问题描述】:

由于某种原因,此代码引发错误

// 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 语句抛出错误。它真的没有那么复杂,我想我可以处理这个。所以... 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: 二进制 '=' :没有找到采用右手操作数的运算符 输入 'std::_Tree<_traits>::iterator' (或者没有可接受的 转换)1> 与 1> [ 1>
_Traits=std::_Tmap_traits,std::allocator>,false> 1> ] 1> c:\program files\microsoft visual studio 9.0\vc\include\xtree(498): 可能是 'std::_Tree<_traits>::iterator &std::_Tree<_traits>::iterator::operator =(const std::_Tree<_traits>::iterator &)' 1> with 1> [ 1>
_Traits=std::_Tmap_traits,std::allocator>,false> 1> ] 1> 在尝试匹配 参数列表 '(std::_Tree<_traits>::iterator, std::_Tree<_traits>::iterator)' 1> 与 1> [ 1>
_Traits=std::_Tmap_traits,std::allocator>,false> 1> ] 1> 和 1> [ 1>
_Traits=std::_Tmap_traits,std::allocator>,false> 1> ] 1>c:\ucdhb2\gaia\logonserver\v6\gaiaserver.cpp(812):错误 C2678: binary '!=' : 没有找到接受左操作数的运算符 输入 'std::_Tree<_traits>::iterator' (或者没有可接受的 转换)1> 与 1> [ 1>
_Traits=std::_Tmap_traits,std::allocator>,false> 1> ] 1> c:\program files\microsoft sdks\windows\v6.0a\include\guiddef.h(197): 可能是 'int 运算符 !=(const GUID &,const GUID &)' 1> c:\program files\microsoft 视觉工作室 9.0\vc\include\xtree(314): 或 'bool std::_Tree<_traits>::const_iterator::operator !=(const std::_Tree<_traits>::const_iterator &) const' 1> with 1>
[ 1>
_Traits=std::_Tmap_traits,std::allocator>,false> 1> ] 1> 在尝试匹配 参数列表 '(std::_Tree<_traits>::iterator, std::_Tree<_traits>::iterator)' 1> 与 1> [ 1>
_Traits=std::_Tmap_traits,std::allocator>,false> 1> ] 1> 和 1> [ 1>
_Traits=std::_Tmap_traits,std::allocator>,false> 1> ]

【问题讨论】:

  • roomlist和rinventory的类型是什么?
  • 地图 房间列表; map rinventory;
  • 在问题中发布它们,以及AnItem 的定义。

标签: c++ map iterator


【解决方案1】:

你的迭代器

map<int, AnItem>::iterator it;

需要是类型

map<string, long>::iterator it;

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

【讨论】:

  • 谢谢,但我仍然遇到同样的错误 + 一个新的错误 C2228: left of '.name' must have class/struct/union
  • 我认为该循环中有一些非常错误的地方:如果您确实打算迭代rinventory,那么(*it).second 是long,但您正在向它请求成员name .你能再想想你想在这段代码中实现什么吗?
  • 嗯,当我将它更改为 时,它工作正常!但我仍然需要找到我想在那个循环中使用的 AnObjects :( 我想我仍然可以实现它。如果没有,我会回来。非常感谢帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
  • 2020-06-06
  • 2020-09-28
  • 1970-01-01
  • 1970-01-01
  • 2013-08-20
  • 2018-04-13
相关资源
最近更新 更多