使用运算符==的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
成员,或者更好的是,是一个独立函数。
如果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版本。
您的operator==
函数应该是const
。实际上,您不能在const
对象(或对const
.
尝试一个const方法:
inline bool ComplianceOrderRecord::operator ==(const ComplianceOrderRecord& other) const {
return price == other.price;
}
相关文章:
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 在Google Kick start中提交时出错
- 在c++中访问int到类对象的映射时出错
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 分段错误当我试图运行程序时出错
- 使用dynamic_cast和构造函数时出错
- CHECK(调用)函数在Google Colab中出错
- 用pybind11包装C++抽象类时出错
- 为x86而非x64编译时出错
- 使用运算符==的std::find时出错
- 在用户定义对象上调用std::find时出错
- 向量的std::find()出错
- 尝试使用从 ptr_map::find 返回的迭代器时出错