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 抛出编译错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥编译器会抛出“预期类型说明符”?

为啥 C# 编译器不抛出 null 的逻辑比较?

.Net 2+:为啥 if( 1 == null ) 不再抛出编译器异常?

编译器不抛出“找不到模块”错误

GWT 2.5.1编译始终抛出Java堆空间错误

Webpack 使用 mobx 编译抛出错误