std :: remove导致编译错误

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

/usr/include/c++/4.6/bits/stl_algo.h:162:error:'__first .__ gnu_cxx :: __ normal_iterator <_Iterator,_Container> :: operator * with _Iterator = User * _Container = std :: vector,__gnu_cxx :: __ normal_iterator <_Iterator,_Container> :: reference = User&== __val'

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

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

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

std :: remove calls operator== ,你需要为你的User type重载:

假设您按名称比较用户:

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

如果仔细阅读,编译器消息会告诉你什么是缺少的。

或者,如果使用C ++ 11,则使用带lambda的std :: remove_if

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