vector类 问题

alan817 2006-04-04 06:46:46
class List{
public:
int ID;
AnsiString UserID;
AnsiString UserName;
AnsiString Target;
bool IsConnected;
AnsiString LoginIP;
AnsiString LoginDateTime;
};

vector <List> UserList;

每当有客户端连接就插入一个 UserList.insert(....);

当断开的时候我想把其中的这个元素删除掉

……

List d_user;
d_user = UserList[deleteID];
vector <List>::iterator where = find(UserList.begin(),UserList.end(),d_user);
if(*where == d_user)
UserList.erase(where);

错误:
[C++ Warning] Unit1.cpp(33): W8012 Comparing signed and unsigned values
[C++ Warning] Unit1.cpp(144): W8012 Comparing signed and unsigned values
[C++ Error] Unit1.cpp(153): E2093 'operator==' not implemented in type 'List' for arguments of the same type


如果不要 if(*where == d_user)
编译的时候,代码窗口会弹出 _algobase.c 这个页面



...全文
349 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
pp616 2006-04-05
  • 打赏
  • 举报
回复
用find_if 来做。自己写一个用来比较的类
根据你上面的代码大致这么写

class _MyFind{
private:
const List &mList;
public:
_MyFind(List &value):mList(value){}
bool operator()(List &Val)
{
//比较的代码。
}
};

//使用
vector <List>::iterator where = find_if(UserList.begin(),UserList.end(),_MyFind(d_user));

还有点建议
vector 里放类不太好。把vector <List> UserList;
改为
vector <List *> UserList; 这样比较好。

zcchm 2006-04-05
  • 打赏
  • 举报
回复
你这样是不行的。错误信息很明显告诉你了,find函数需要容器里的元素类型实现operator==操作符重载,而list没有实现这个,当然会报错。

解决方法:不要用find,你自己遍历判等。

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧