2016-03-23 11 views
0

C++のベクトルからオブジェクトを消去しようとしていますが、奇妙な(そして長い)エラーが出ています。私はこれを書いた:C++のベクトルからオブジェクトを消去する

#include <iostream> 
#include <vector> 
#include <algorithm> 
using namespace std; 

class foo 
{ 
    int a; 
    public: 
    foo(int _a):a(_a){} 
}; 

int main() { 
    foo f1(5),f2(10); 
    vector<foo> vec = {f1,f2}; 
    vec.erase(remove(vec.begin(),vec.end(),f1),vec.end()); // remove f1 (error) 
    return 0; 
} 

正確なエラーはhereです。
一方、intのベクトルを作成し、そのベクトルから整数を削除しようとすると、正常に動作します。

#include <iostream> 
#include <vector> 
#include <algorithm> 
using namespace std; 

int main() { 
    vector<int> vec = {5,10}; 
    vec.erase(remove(vec.begin(),vec.end(),5),vec.end()); // works fine 
    return 0; 
} 

最初にエラーが発生する理由はわかりません。

+2

ポスト正確なエラーメッセージ –

+3

何の 'FOO ::演算子は=='はありません –

+1

私の推測であなたのために定義された比較演算子を持っていないため、エラーが発生します ' fooクラス。どのようにして 'foo'クラスのインスタンスを比較するのか、コンパイラはどのように知っていますか? –

答えて

5

std::removeclass fooにはoperator ==を含めるか、明示的に比較関数を渡す必要があります。標準タイプ(例えば、int)の場合、比較関数は言語で定義されているため、エラーなしでコンパイルされます。

operator ==ための一つの例は、指定できます

class foo 
{ 
    ... 
    bool operator ==(const foo &t) const { return t.a == a; } 
}; 
関連する問題