2

我正在尝试使用问题的答案得到奇怪的错误 -

/usr/include/c++/4.6/bits/stl_algo.h:162: 错误: '__first.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* 与 _Iterator = User* 中的 'operator==' 不匹配, _Container = std::vector, __gnu_cxx::__normal_iterator<_Iterator, _Container>::reference = User& == __val'</p>

我正在使用 Linux(Ubuntu 64 位),也许这是个问题。提前致谢。

更新:我使用 remove() 的代码:

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

1 回答 1

4

std::remove 调用operator==,你需要为你重载它User type

假设您按名称比较用户:

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

如果您仔细阅读,编译器消息会告诉您究竟缺少什么。

或者,如果您使用 C++11,则将std::remove_if与 lambda 一起使用

myVec.erase(std::remove(myVec.begin(), myVec.end(), 
            [](const User& u){ return u.name == "name"; }), vec.end());
于 2013-02-17T11:07:56.277 回答