2013-02-17 142 views
2

我想使用的答案爲question並得到奇怪的錯誤 -的std ::刪除原因編譯錯誤

/usr/include/c++/4.6/bits/stl_algo.h:162: error: no match for ‘operator==’ in ‘__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位),也許這是一個問題。 在此先感謝。

UPDATE: 代碼,我使用remove()方法:

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

你可以張貼再現誤差小的代碼示例? – juanchopanza 2013-02-17 11:06:38

回答

4

的std ::刪除通話operator==,你需要重載它爲您User type

假設你的名字比較用戶:

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

如果您仔細閱讀,編譯器消息會告訴您究竟丟失了什麼。

或者使用std::remove_if與拉姆達如果你使用C++ 11

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

或者使用'remove_if'。 – 2013-02-17 11:08:50

+0

如果你想使用lambdas(OP使用g ++ 4.6),不要忘記使用'-std = C++ 0x'。 – Zeta 2013-02-17 11:11:40

+0

非常感謝!對不起,壞的問題,我不是一個好的C++程序員... – avrilfanomar 2013-02-17 11:12:39

相關問題