描述:
list里面是自定义的结构:
list <SM_TASK> g_taskList;
结构如下:
typedef struct __st_SM_TASK
{
int Number; //话机号码关键字
char Version[20]; //版本号
}SM_TASK;
push_back都是正常的,可以加入,如:
SM_TASK m_smTask;
m_smTask.Number=100;
strncpy(m_smTask.Version, "sdfasdf", 20);
g_taskList.push_back(m_smTask);
-------------------------------------------------
现在想删除里面的对象,已经定位到该对象,remove出错:
SM_TASK sm_task;
g_taskList.remove(m_tmpTask);
编译错误:
error C2678: binary '==' : no operator defined which takes a left-hand operand of type 'struct __st_SM_TASK' (or there is no acceptable conversion)
....
解决方案1:
iter就向一个链表中一个节点的指针。如果你删除了这个节点那么它的指针也就失效了,就找不到下一个节点正确写法。
list<SM_TASK>::iterator iter = g_taskList.begin();
while(iter != g_taskList.end())
{
SM_TASK& one = (SM_TASK&)(*iter);
AttendID = one.Number;
++iter; //在使用跌代器的时候为了提高效率一般都用前置++
g_taskList.remove(one);//我加了这一句,操作符已经重载了
}
bool operator == (SM_TASK& a, SM_TASK& b)
{
if(a.Number != b.Number)
return false;
return _tcscmp(a.Version,b.Version) == 0;
}
需要重载 ==
bool operator == (const __st_SM_TASK& task)const
{ return task.Number == this->Number && !strcmp(task.Version,this->Version);}