我在以下结构中使用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)
非常感谢您理解此错误的任何帮助。
答案 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;
}