2

質問の回答を使用しようとしていますが、奇妙なエラーが発生します-

/usr/include/c++/4.6/bits/stl_algo.h:162:エラー:'__ first .__ gnu_cxx :: __ normal_iterator <_Iterator、_Container> :: operator * with _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を使用します

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