2017-01-16 39 views
0

我在C++上使用std::vector來存儲使用vector::push_back的類對象列表。C++ vector :: erase抱怨超載分辨率和刪除的運算符'=='

我的add函數接受基類的類型,以便可以使用相同的方法。

Add(MyBaseClass object) { 
    my_vector.push_back(object) 
} 

我不得不刪除功能由每件將其刪除添加

Remove(MyBaseClass object) { 
    my_vector.erase(std::remove(my_vector.begin(), my_vector.end(), object), my_vector.end()); 
} 

的附加工作正常,但我Remove方法給出了以下錯誤:

overload resolution selected deleted operator '==' 
      if (!(*__i == __value_)) 
       ~~~~^~~~~~~~~ 

我拿起載體::從here擦除代碼。 我的擦除方法有什麼問題?有沒有其他更好的方法來刪除項目?

+1

'MyBaseClass'是否有'operator =='? – NathanOliver

+0

nope。我需要定義一個嗎?不應該默認提供的工作? –

+1

這聽起來像你期待與MyBaseClass的子類一起工作。它不;閱讀「對象切片」。 – molbdnilo

回答

2

多通擔保的ForwardIterator要求remove去努力std::vector指定MyBaseClass必須實現operator==

您的課程似乎沒有實現此目標,因此編譯失敗。

+0

ok。讓我嘗試在我的基類中定義一個'=='運算符並檢查 –

+0

如果我添加了'std :: functions',該怎麼辦?例如爲了實現回調,我想有一個列表回調和刪除每個意願 –