gg
当前位置: 首页 >> CPP >> Content

"=="没有找到接受“XXX”类型的左操作数的运算符(或没有可接受的转换)

相关文章

for(UserList::iterator UserIterator = ClientList.begin();
      UserIterator != ClientList.end();
      UserIterator++)
{
       if(strcmp((*UserIterator).userName,currentuser.userName) == 0)
      {
             // typedef list<stUserListNode> UserList;
             // UserList ClientList;
             ClientList.remove(*UserIterator); //此处错,求解
             break;
       }
}
错误 6 error C2678: 二进制“==”: 没有找到接受“stUserListNode”类型的左操作数的运算符(或没有可接受的转换) Iterator
------Solutions------

ClientList.remove(UserIterator); //去掉*号,编译应该没错

------Solutions------
问题是,一边改变UserList的内容,一边遍历,会出错滴...

------Solutions------
没事,他只是删除一个就退出了,不会出错, 不要用(*UserIterator).userName,看着多余。
UserIterator->userName
------Solutions------
引用 1 楼 zhaokai115 的回复:
ClientList.remove(UserIterator); //去掉*号,编译应该没错


//去掉*号
错误6error C2664: “std::list<_Ty>::remove”: 不能将参数 1 从“std::list<_Ty>::_Iterator<_Secure_validation>”转换为“const stUserListNode &”e:\myprojects\vs\socketdemo\p2pudpdemo\p2pudpsrv\p2pudpsrv\p2pudpsrvdlg.cpp412P2pUdpSrv

------Solutions------
typedef list<stUserListNode> UserList; 
改成 
typedef list<stUserListNode*> UserList;

remove就没问题了,可为啥typedef list<stUserListNode> UserList; 就会出错呢,编译器VS2005
------Solutions------
void remove(const _Ty& _Val_arg)
{// erase each element matching _Val
/* Dinkumware makes a copy of _Val_arg in case it's removed along the way, i.e.
 * when the user pass an element of the list as _Val_arg.
 *
 * We believe that the signature of std::list::remove should be changed
 * from remove(const _Ty&) to remove(_Ty) to explicitly indicate that a copy is involved.
 */
const _Ty _Val = _Val_arg;// in case it's removed along the way
iterator _Last = end();
for (iterator _First = begin(); _First != _Last; )
if (*_First == _Val)                     //结构体对比不能直接用“==”
_First = erase(_First);
else
++_First;
}


总算弄明白了点,就是两个结构体的比较,结贴了

热门搜索 - TryCatch Copyright © 2012-2013 tc5u.com 版权所有