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)
....
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)
....
SM_TASK的==操作符。
{
if(a.Number != b.Number)
return false;
return _tcscmp(a.Version,b.Version) == 0;
}
{
int Number; //话机号码关键字
char Version[20]; //版本号
bool operator == (const __st_SM_TASK &obj) const {
for (int i = 0; i < 20; i++) {
if (Version[i] != obj.Version[20]) return false;
}
return Number == obj.Number;
}
}SM_TASK;
bool operator == (const __st_SM_TASK& task)const
{ return task.Number == this->Number && !strcmp(task.Version,this->Version);}
for (int i=0;i<g_taskList.size();i++)
{
//把g_taskList的值怎么取出来?没有看到getitem之类的属性和方法
}
for (int i = 0; i < 5; i++) {
ls.push_back(i);
}
for (list<int>::iterator iter = ls.begin(); iter != ls.end(); iter++) {
cout << *iter << endl;
}
while(iter != g_taskList.end())
{
SM_TASK& one = (SM_TASK&)(*iter);
iter++;
}
list<SM_TASK>::iterator iter = g_taskList.begin();
while(iter != g_taskList.end())
{
SM_TASK& one = (SM_TASK&)(*iter);
AttendID = one.Number;
g_taskList.remove(one);//我加了这一句,操作符已经重载了
iter++;
}
编译正常,我往list上加了两项,循环时,第一次取值和删除都正常,第二次取值时,运行到
AttendID = one.Number;出异常错误框debug assretion failed!...
{
SM_TASK& one = (SM_TASK&)(*iter);
AttendID = one.Number;
++iter; //在使用跌代器的时候为了提高效率一般都用前置++
g_taskList.remove(one);//我加了这一句,操作符已经重载了}
确实需要用++前置!