std :: remove вызывает ошибку компиляции

Я пытаюсь использовать ответы для вопрос и получаю странную ошибку —

/usr/include/c++/4.6/bits/stl_algo.h:162: ошибка: нет совпадения для оператора = operator == в ‘__first .__ gnu_cxx :: __ normal_iterator<_Iterator, _Container> :: operator * с _Iterator = Пользователь *, _Container = std :: vector, __gnu_cxx :: __ normal_iterator<_Iterator, _Container> :: reference = Пользователь& == __val ’

Я использую Linux (Ubuntu 64-bit) и, возможно, это проблема.
Заранее спасибо.

ОБНОВИТЬ:
код, где я использую remove ():

myVec.erase(std::remove(myVec.begin(), myVec.end(), vecMember), myVec.end());

2

Решение

std :: удалить звонки operator==необходимо перегрузить его для вашего User type:

Предположим, вы сравниваете пользователя по имени:

bool operator==(const User& lhs, const User& rhs)
{
return lhs.name == rhs.name;
}

Если вы внимательно прочитаете, компилятор сообщит вам, чего именно не хватает.

Альтернативно использовать станд :: remove_if с лямбда, если вы используете C ++ 11

myVec.erase(std::remove(myVec.begin(), myVec.end(),
[](const User& u){ return u.name == "name"; }), vec.end());
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]