c ++从列表中删除对象 - 无法正常工作

时间:2015-05-20 20:28:48

标签: c++ list object

我有一个函数,即根据它的名称从列表中删除一个对象,该对象通过类函数special_event.getName()返回。它获取要删除的对象的列表和名称,并在删除它之后,返回删除了对象的列表。这是代码:

list<special_event> removeEvent(string eventName, list<special_event> events)
{
list<special_event>::iterator eit;
string getName;
for (eit = events.begin(); eit != events.end(); eit++)
{
    if ((*eit).getName() == eventName)
    {
        events.remove(*eit);
    }
}
cout << endl << endl << eventName << " has been removed!";
return events;

}

我收到错误&#34;错误C2678:二进制&#39; ==&#39; :找不到哪个运算符采用类型&#39; special_event&#39;的左手操作数。 (或者没有可接受的转换)。

感谢任何帮助,谢谢

3 个答案:

答案 0 :(得分:3)

缺少运算符==

您需要实施适当的bool operator==(...)重载。我会告诉你这些论点,但不清楚你在问题中的表现。

迭代器失效

致电events.remove(*eit);后,eit不再有效。所以eit++会导致未定义的行为。

您已经有了一个迭代器

由于您已经删除了要删除的元素的迭代器,为什么不将它与std::list::erase一起使用,它带有迭代器参数。

答案 1 :(得分:1)

您的special_event类/结构需要具有正确的==重载(您可能以左手类型不是special_event或者可以的方式重载它转换为它)。

bool operator==(const special_event&);

如果操作符重载是成员函数。

答案 2 :(得分:0)

  

if((* eit).getName()== eventName)

您要求对类型special_event进行比较。编译器不可能知道如何将这种新类型与任何东西进行比较。因此,您必须重载==运算符以定义比较的方式。

bool operator==(const special_event& right_side){      
    /* comparison */ 
}