首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

std:Vector_iterator<Ty,Alloc> 异常

2012-11-03 
求助 std::_Vector_iterator_Ty,_Alloc 错误万恶的VC6啊第一句 m_PetList.erase(&m_PetList[i])m_PetLi

求助 std::_Vector_iterator<_Ty,_Alloc> 错误
万恶的VC6啊



第一句 m_PetList.erase(&m_PetList[i]);

m_PetList定义 std::vector <CHARACTER::PET_CLIENT_DATA> m_PetList;

提示错误 error C2664: “std::_Vector_iterator<_Ty,_Alloc> std::vector<_Ty>::erase (std::_Vector_iterator<_Ty,_Alloc>)”: 不能将参数 1 从“CHARACTER::_tagPET_CLIENT_DATA *”转换为“std::_Vector_iterator<_Ty,_Alloc>”
  with
  [
  _Ty=CHARACTER::PET_CLIENT_DATA,
  _Alloc=std::allocator<CHARACTER::PET_CLIENT_DATA>
  ]
  无构造函数可以接受源类型,或构造函数重载决策不明确




代码 for(ListItemItor itor=&m_items[m_startindex];itor!=m_items.end();itor++)

ListItemItor定义 typedef ListItem::iterator ListItemItor;

m_items定义 typedef std::vector<CListbox_item*> ListItem;

error C2440: “初始化”: 无法从“CListbox_item **”转换为“std::_Vector_iterator<_Ty,_Alloc>”
  with
  [
  _Ty=CListbox_item *,
  _Alloc=std::allocator<CListbox_item *>
  ]
  无构造函数可以接受源类型,或构造函数重载决策不明确



代码 for(it = &m_UniBufferList[nBegin]; it != &m_UniBufferList[nEnd] && it != m_UniBufferList.end(); ++it)

m_UniBufferList定义 std::vector <UNIBUFFERCOLOR> m_UniBufferList;

错误 error C2679: 二进制“=”: 没有找到接受“UNIBUFFERCOLOR *”类型的右操作数的运算符(或没有可接受的转换)
  d:\program files\microsoft visual studio 8\vc\include\vector(392): 可能是“std::_Vector_iterator<_Ty,_Alloc> &std::_Vector_iterator<_Ty,_Alloc>::operator =(const std::_Vector_iterator<_Ty,_Alloc> &)”
  with
  [
  _Ty=UNIBUFFERCOLOR,
  _Alloc=std::allocator<UNIBUFFERCOLOR>
  ]
  试图匹配参数列表“(std::_Vector_iterator<_Ty,_Alloc>, UNIBUFFERCOLOR *)”时
  with
  [
  _Ty=UNIBUFFERCOLOR,
  _Alloc=std::allocator<UNIBUFFERCOLOR>
  ]

[解决办法]
m_PetList.erase 需要的是一个迭代器

[解决办法]
补充一点
m_PetList[i]是一个CHARACTER::PET_CLIENT_DATA类型
&m_PetList[i]就是一个CHARACTER::PET_CLIENT_DATA*

而erase是需要一个 std::vector <CHARACTER::PET_CLIENT_DATA>::iterator类型 作为参数
[解决办法]
这样即可:m_PetList.erase(m_PetList.begin()+i);

VC6是万恶,可也不能什么都怪它。
[解决办法]
ListItemItor itor=&m_items[m_startindex]
这都是因为迭代器的原因吧
这样改看可以么:
ListItemItor itor = m_items.begin()+m_startindex

m_PetList.erase(&m_PetList[i]); 
改的方式同理,构造一个迭代器,然后再当作参数传进erase函数

热点排行