2012-05-13 78 views
0

我遇到了一個錯誤列表,當我試圖執行此擦除功能從我的矢量中刪除'2'時。我不確定問題在哪裏。幫助將不勝感激!刪除矢量中的特定值

STRUCT明特

struct MyInt 
{ 
friend ostream &operator<<(ostream &printout, const MyInt &Qn) 
{ 
    printout<< Qn.value << endl; 
    return printout; 
} 

    int value; 
    MyInt (int value) : value (value) {} 
}; 

STRUCT的MyStuff

struct MyStuff 
{ 
    std::vector<MyInt> values; 

    MyStuff() : values() 
    { } 
}; 

MAIN

int main() 
{ 
MyStuff mystuff1,mystuff2; 

for (int x = 0; x < 5; ++x) 
    { 
     mystuff2.values.push_back (MyInt (x)); 
    } 

vector<MyInt>::iterator VITER; 
mystuff2.values.push_back(10); 
mystuff2.values.push_back(7); 

    //error points to the line below 
mystuff2.values.erase(std::remove(mystuff2.values.begin(), mystuff2.values.end(), 2), mystuff2.values.end()); 

    return 0; 

}

錯誤消息

stl_algo.h:在函數 '_OutputIterator的std :: remove_copy(_InputInputIterator,_InputIterator,const_Tp &)[with_InputIterator = __gnu_cxx:__ normal_iterator>>,輸出迭代= __ gnu_cxx :: __正常迭代>>,TP = INT]'

否匹配操作員==」

Erorr消息顯示partciular線違反幾乎stl_algo.h的線1267 線,1190,327,1263,208,212,216,220,228,232 ,236

+1

「不匹配的==操作符」有什麼不清楚呢?您需要定義一個'operator =='函數,以便您可以將myInt與整數進行比較。 – jrok

+0

@jrok,這應該是一個答案。這真的很簡單。 – chris

回答

2

您需要爲MyInt類別的==運營商超載。

例如:

struct MyInt 
{ 

friend ostream &operator<<(ostream &printout, const MyInt &Qn) 
{ 
    printout<< Qn.value << endl; 
    return printout; 
} 

// Overload the operator 
bool operator==(const MyInt& rhs) const 
{ 
    return this->value == rhs.value; 
} 

    int value; 
    MyInt (int value) : value (value) {} 
}; 
+0

該運算符應該是const。 –

+0

@ BenjaminLindley修正了它。使它成爲'const'的目的是什麼? – 2012-05-13 18:08:42

+1

所以你可以比較兩個常量MyInt。 –

1

有兩個問題。你看到的錯誤是告訴你,你還沒有定義int和你的類型之間的平等比較。在你的結構,你應該定義一個平等運營商

bool operator==(int other) const 
{ 
    return value == other; 
} 

,當然在其他方向上定義一個全球運營商:

bool operator==(int value1, const MyInt& value2) 
{ 
    return value2 == value1; 
}