Бинарный “==”: не найден оператор, принимающий левый операнд типа “xxx”

Sergei Petrov

не пойму, почему remove_if работает как надо, а remove выдают ошибку.

std::list<element> items;

void RemoveElement(const Element & item)
{
    items.remove_if([&](const Element & value) {return item.GetName() == value.GetName(); });
    items.remove(item);
}
</element>
2 ответа

Sergei Petrov

Добавьте оператор сравнения, вроде

bool operator==(const Element & item, const Element & value) 
{
    return item.GetName() == value.GetName(); 
}


Sergei Petrov

Что значит "почему"? Я не знаю, что такое "xxx", но скорее всего в сообщении об ошибке у вас ясно сказано, что оператора == для сравнения Element с Element у вас нет. Потому и ошибка.

Возможно также, что оператор-то вы написали, но, как часто бывает, пренебрежение правилами константной корректности сделало его невызываемым в данном случае.

licensed under cc by-sa 3.0 with attribution.