[英]Why the error no match for 'operator==', when using `std::find`?
[英]Error using std::find with operator==
我在以下結構上使用std :: find遇到錯誤...
struct ComplianceOrderRecord {
explicit ComplianceOrderRecord(IOrder& order);
bool operator ==(const ComplianceOrderRecord& other) const;
double price;
};
inline bool ComplianceOrderRecord::operator ==(const ComplianceOrderRecord& other) const {
return price == other.price;
}
我如下使用它...
inline void Compliance::RemoveComplianceOrderRecord(const ComplianceOrderRecord& order) {
auto it = std::find(m_compliantOrderList.begin(),
m_compliantOrderList.end(), order);
if(it == m_compliantOrderList.end()) {
return;
}
m_compliantOrderList.erase(it);
}
錯誤是...
error C2679: binary '==' : no operator found which takes a right-hand operand of type 'const ComplianceOrderRecord' (or there is no acceptable conversion)
在理解此錯誤的任何幫助將不勝感激。
您的operator==
應該是const
成員,甚至更好,應該是獨立函數。
您的operator==
函數應為const
。 實際上,您不能在const
對象(或const
的引用)上調用它。
如果m_compliantOrderList
不是container<ComplianceOrderRecord >
則可以重現此錯誤。 (也許它是一個指針容器或其他完全不相關的類。
編輯:
你平等的運營商可以比較的兩個實例ComplianceOrderRecord
,但find
需要進行比較的對象的指針。 重載運算符以執行這種比較會很奇怪,因此您可以將find_if
與自定義謂詞一起使用,例如:
struct RecordIsEqualTo
{
const ComplianceOrderRecord* record;
RecordIsEqualTo(const ComplianceOrderRecord& r): record(&r) {}
bool operator() (const ComplianceOrderRecord* r) const { return *record == *r; }
};
std::find_if(m_compliantOrderList.begin(), m_compliantOrderList.end(),
RecordIsEqualTo(order) );
或其lambda版本。
嘗試使用const方法:
inline bool ComplianceOrderRecord::operator ==(const ComplianceOrderRecord& other) const {
return price == other.price;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.