std :: remove导致编译错误

时间:2013-02-17 11:05:11

标签: c++ linux vector std stl-algorithm

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

  

/ usr / include / c ++ / 4.6 / bits / stl_algo.h:162:错误:'__ first .__ gnu_cxx :: __ normal_iterator< _Iterator,_Container> :: operator * with _Iterator ='operator =='不匹配User *,_ Container = std :: vector,__ gn_cxx :: __ normal_iterator< _Iterator,_Container> :: reference = User& == __val'

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

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

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

1 个答案:

答案 0 :(得分:4)

std ::删除调用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());