我有一个函数,即根据它的名称从列表中删除一个对象,该对象通过类函数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;的左手操作数。 (或者没有可接受的转换)。
感谢任何帮助,谢谢
答案 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 */
}