forward_list::remove 抛出编译错误
Posted
技术标签:
【中文标题】forward_list::remove 抛出编译错误【英文标题】:forward_list::remove throwing compilation error 【发布时间】:2015-10-31 20:39:49 【问题描述】:我有以下代码:
typedef std::forward_list<RdidSettings> RdidList;
RdidList m_rdids;
//ctor for RdidSettings
RdidSettings(_In_ const GUID& rdid, _In_ bool isDr) throw() :
//Add to rdidlist method
RdidSettings& AddRdid( _In_ const GUID& rdid, _In_ bool isDr )
m_rdids.emplace_front(rdid, isDr); return m_rdids.front();
//method for rdid list method
void RemoveRdid( _In_ RdidSettings& rdidData)
m_rdids.remove(rdidData); <<-- whats wrong with this remove ?
在我引入 remove 方法的那一刻,我开始收到编译器错误:
forward_list(1281):错误 C2678:二进制“==”:未找到运算符 它采用 RdidSettings' 类型的左操作数(或者没有 可接受的转换)可以是 'bool std::operator ==(const std::error_condition &,const std::error_code &) throw()'
'bool std::operator ==(const std::error_condition &,const std::error_code &) throw()' 6> \sdk\inc\ucrt\stl120\system_error(406): 或 'bool std::operator ==(const std::error_code &,const std::error_condition &) throw()' 6> \sdk\inc\ucrt\exception(333): 或 'bool std::operator ==(const std::exception_ptr &,std::nullptr_t)' 6> \sdk\inc\ucrt\exception(328): 或 'bool std::operator ==(std::nullptr_t,const std::exception_ptr &)' 6> \sdk\inc\ucrt\exception(323): 或 'bool std::operator ==(const std::exception_ptr &,const std::exception_ptr &)' 6> 尝试 匹配参数列表 '(RdidSettings, const RdidSettings)' 6> \sdk\inc\ucrt\stl120\forward_list(1276) :编译类时 模板成员函数'void std::forward_list>::remove(const _Ty &)' 6> with 6> [ 6> _Ty=RdidSettings 6> ] 6> hostsettings.cpp(65) : 请参阅对函数模板实例化的参考 'void std::forward_list>::remove(const _Ty &)' 正在编译 6> 与 6> [ 6> _Ty=RdidSettings 6> ] 6> \hostsettings.h(181) : 参见类模板实例化的参考 'std::forward_list>' 正在编译 6> 与 6> [ 6> _Ty=RdidSettings
【问题讨论】:
【参考方案1】:我认为这是因为您没有为RdidSettings
提供operator==
。
【讨论】:
谢谢,这是什么意思?您的意思是为 == 实现重载。 @confusednerd,需要提供operator==,这样可以比较两个RdidSettings对象。以上是关于forward_list::remove 抛出编译错误的主要内容,如果未能解决你的问题,请参考以下文章