使用std :: find与operator ==时出错

时间:2012-01-13 14:26:45

标签: c++ std

我在以下结构中使用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)

非常感谢您理解此错误的任何帮助。

4 个答案:

答案 0 :(得分:5)

您的operator==应该是const成员,甚至更好,是一个独立的功能。

答案 1 :(得分:1)

您的operator==功能应为const。实际上,您无法在const对象(或对const的引用)上调用它。

答案 2 :(得分:1)

如果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版本。

答案 3 :(得分:0)

尝试使用const方法:

inline bool ComplianceOrderRecord::operator ==(const ComplianceOrderRecord& other) const {
return price == other.price;

}