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

and*_*dre 0 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;
}
Run Code Online (Sandbox Code Playgroud)

我用它如下......

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);
}
Run Code Online (Sandbox Code Playgroud)

错误是......

error C2679: binary '==' : no operator found which takes a right-hand operand of type 'const ComplianceOrderRecord' (or there is no acceptable conversion)
Run Code Online (Sandbox Code Playgroud)

任何帮助理解这个错误将非常感激.

Fre*_*Foo 5

operator==应该是const一个独立的职能,甚至更好.

  • 关于独立功能的好处,因为他的课程支持隐式转换.作为成员,`aComplianceOrderRecord == anIOrder`是合法的,但`anIOrder == aComplianceOrderRecord`不是.(通常,我会使构造函数`explicit`,删除隐式转换,但我不知道这里是否需要它.) (2认同)