簡體   English   中英

使用std :: find和operator ==時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM