| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1928 人关注过本帖
标题:类类型的list中删除任意元组问题
只看楼主 加入收藏
工大刘氏
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-6-8
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:9 
类类型的list中删除任意元组问题
在头文件中声明USERINFO类和该类型的list
extern class USERINFO userinfo;
extern list<USERINFO> alluserinfo;
然后定义某个删除list中元组的函数
void delList(USERINFO a)
{
    //标记alluserinfo的起始和终止位置
    list<USERINFO>::iterator iterBegin = alluserinfo.begin();
    list<USERINFO>::iterator iterEnd = alluserinfo.end();
    list<USERINFO>::iterator delIter;
    if(iterBegin != iterEnd)
    {
        //alluserinfo.pop_back();
        alluserinfo.remove(a);
        //delIter=find(iterBegin,iterEnd,a);
        //cout<<(*delIter).getipAddr()<<endl;
        //iterBegin=alluserinfo.remove(delIter);
        //++iterBegin;
    }
}
之后再main中调用delList函数delList(userinfo);
注:userinfo和alluserinfo都是全局变量已赋值
这样根据传递的USERINFO类型的参数删除某一个元组,可是delList函数中remove,即删除功能处总提示无法转义什么的错误,注视那些代码为之前使用的几种办法,可是始终有类型的问题,请各位帮忙提供一种指定删除的方法,谢谢...
搜索更多相关主题的帖子: list 类型 删除 
2010-08-15 19:38
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:5 
你把错误詳細的贴出来,看看是什么类型转什么类型的错误。

而且这个不用这么费劲,remove 自己会查 begin 是不是等于 end 的。
2010-08-16 00:09
工大刘氏
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-6-8
收藏
得分:0 
回复 2楼 pangding
1>------ 已启动生成: 项目: Test, 配置: Debug Win32 ------
1>正在编译...
1>serverAddDel.cpp
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\list(937) : error C2784: “bool std::operator ==(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem *)”: 无法从“USERINFO”为“const std::basic_string<_Elem,_Traits,_Alloc> &”推导 模板 参数
1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\string(90) : 参见“std::operator ==”的声明
1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\list(927): 编译类 模板 成员函数“void std::list<_Ty>::remove(const _Ty &)”时
1>        with
1>        [
1>            _Ty=USERINFO
1>        ]
1>        c:\documents and settings\administrator\my documents\visual studio 2008\projects\test\test\LocalIP.h(13): 参见对正在编译的类 模板 实例化“std::list<_Ty>”的引用
1>        with
1>        [
1>            _Ty=USERINFO
1>        ]
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\list(937) : error C2784: “bool std::operator ==(const _Elem *,const std::basic_string<_Elem,_Traits,_Alloc> &)”: 无法从“USERINFO”为“const _Elem *”推导 模板 参数
1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\string(80) : 参见“std::operator ==”的声明
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\list(937) : error C2784: “bool std::operator ==(const std::basic_string<_Elem,_Traits,_Alloc> &,const std::basic_string<_Elem,_Traits,_Alloc> &)”: 无法从“USERINFO”为“const std::basic_string<_Elem,_Traits,_Alloc> &”推导 模板 参数
1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\string(70) : 参见“std::operator ==”的声明
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\list(937) : error C2784: “bool std::operator ==(const std::list<_Ty,_Ax> &,const std::list<_Ty,_Ax> &)”: 无法从“USERINFO”为“const std::list<_Ty,_Ax> &”推导 模板 参数
1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\list(1293) : 参见“std::operator ==”的声明
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\list(937) : error C2784: “bool std::operator ==(const std::istream_iterator<_Ty,_Elem,_Traits,_Diff> &,const std::istream_iterator<_Ty,_Elem,_Traits,_Diff> &)”: 无法从“USERINFO”为“const std::istream_iterator<_Ty,_Elem,_Traits,_Diff> &”推导 模板 参数
1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\iterator(266) : 参见“std::operator ==”的声明
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\list(937) : error C2784: “bool std::operator ==(const std::istreambuf_iterator<_Elem,_Traits> &,const std::istreambuf_iterator<_Elem,_Traits> &)”: 无法从“USERINFO”为“const std::istreambuf_iterator<_Elem,_Traits> &”推导 模板 参数
1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\streambuf(548) : 参见“std::operator ==”的声明
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\list(937) : error C2784: “bool std::operator ==(const std::allocator<_Ty> &,const std::allocator<_Other> &) throw()”: 无法从“USERINFO”为“const std::allocator<_Ty> &”推导 模板 参数
1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xmemory(173) : 参见“std::operator ==”的声明
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\list(937) : error C2784: “bool std::operator ==(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)”: 无法从“USERINFO”为“const std::reverse_iterator<_RanIt> &”推导 模板 参数
1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xutility(2220) : 参见“std::operator ==”的声明
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\list(937) : error C2784: “bool std::operator ==(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &)”: 无法从“USERINFO”为“const std::_Revranit<_RanIt,_Base> &”推导 模板 参数
1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xutility(2024) : 参见“std::operator ==”的声明
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\list(937) : error C2784: “bool std::operator ==(const std::pair<_Ty1,_Ty2> &,const std::pair<_Ty1,_Ty2> &)”: 无法从“USERINFO”为“const std::pair<_Ty1,_Ty2> &”推导 模板 参数
1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\utility(68) : 参见“std::operator ==”的声明
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\list(937) : error C2676: 二进制“==”: “USERINFO”不定义该运算符或到预定义运算符可接收的类型的转换
1>正在生成代码...
1>生成日志保存在“file://c:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\Test\Test\Debug\BuildLog.htm”
1>Test - 13 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
错误提示如上!!
那个begin和end是另一种方法是用到的,只是注释掉了没删。
2010-08-16 11:02
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
这个感觉是 USERINFO 定义的毛病,不是你这几行代码的问题。
2010-08-16 11:43
weble
Rank: 2
等 级:论坛游民
帖 子:59
专家分:83
注 册:2009-4-12
收藏
得分:5 
USERINFO类型应该是没有重载==运算符

路漫漫其修远兮,吾将上下而求索
2010-08-16 21:32
工大刘氏
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-6-8
收藏
得分:0 
回复 4楼 pangding
类的结构如下:
2010-08-17 09:28
工大刘氏
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-6-8
收藏
得分:0 
回复 4楼 pangding
类的结构如下:
class USERINFO
{
private:
    string photo;//头像
    string nickName;//昵称
    string localName;//本机计算机名
    string ipAddr;//ip地址
public:
    void setInfo(string a,string b,string c,string d)
    {
        photo = a;
        nickName = b;
        localName = c;
        ipAddr = d;
    }//初始化各个信息
    string getPhoto()
    {
        return photo;
    }
    string getnickName()
    {
        return nickName;
    }
    string getloaclName()
    {
        return localName;
    }
    string getipAddr()
    {
        return ipAddr;
    }
};
2010-08-17 09:29
工大刘氏
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-6-8
收藏
得分:0 
回复 5楼 weble
问题出在这个删除函数中,我还有个添加函数如:
void addList(USERINFO a)
{
    alluserinfo.push_back(a);
}
在list alluserinfo中添加一个类对象,这个函数是可以正常使用的...
2010-08-17 09:31
工大刘氏
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-6-8
收藏
得分:0 
回复 5楼 weble
刚才又看了一下错误在list中位置,找了找资料,应该是==操作符没有重载,大多数操作符对类对象没有意义,所以在list中判断两个对象是否相等就出错了,可以提供一下类==操作符重载的例子么?
2010-08-17 10:45
工大刘氏
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-6-8
收藏
得分:0 
问题解决了,果然如5楼所言,是因为==操作符没有重载的关系,在类中重载了bool operator ==(const USERINFO & other){}问题就解决了,感谢两位的意见...
2010-08-17 13:45
快速回复:类类型的list中删除任意元组问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015642 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved