读书人

std:Vector_iteratorlt;Ty,Allocgt; 异常

发布时间: 2012-11-03 10:57:44 作者: rapoo

求助 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函数

读书人网 >C++

热点推荐