2016-03-23 42 views
0

Bir nesneyi C++ içindeki bir vektörden silmeye çalışıyorum, ancak garip (ve uzun) bir hata veriyor. Ben bu yazdım: Ben olsunC++ 'da vektör nesnesinden nesneyi silme 0 ++

#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; 
} 

tam hata here olduğunu.
Diğer taraftan, bir int vektörünü oluşturduğumda ve o vektörden bir tamsayı çıkarmaya çalıştığımda, düzgün çalışıyor.

#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; 
} 

İlk durumda neden bir hata olduğunu bilmiyorum.

+2

Mesaj hata mesajı tam olarak –

+3

hiçbir foo :: operatör == 'Orada –

+1

Benim tahminim için tanımlanmış hiçbir karşılaştırma operatörü var çünkü hata alıyorum' foo sınıfı. Derleyici, "foo" sınıfının örneklerini nasıl karşılaştırır? –

cevap

5

std::remove için class foo ürününüz operator == ürününü içermeli veya bir karşılaştırma işlevini açıkça iletmelisiniz. Standart tipler için (örneğin, int), karşılaştırma işlevi dil tarafından tanımlanır ve böylece bir hata olmadan derlenir.

operator == için bir örnek olabilir:

class foo 
{ 
    ... 
    bool operator ==(const foo &t) const { return t.a == a; } 
}; 
İlgili konular