不' =='找到的运算符采用const Type的左操作数

时间:2016-12-07 03:56:21

标签: c++ vector operator-overloading

我正在重构我的一些代码来使用结构而不是单个对象。

由于这项更改,我需要在运算符中添加' =='所以我现有的涉及函数的向量可以正确地评估存储在向量中的对象。

class IdentifyingClass; //forward declare class     
Class ReturnData
{
public:
  IdentifyingClass* value;
  float  some_trivial_additional_data;

  bool operator==(const ReturnData& query_obj)
  {
    return value == query_obj.value;
  }

  bool operator==(const IdentifyingClass* query_obj)
  {
    return value == query_obj;
  }
}

依赖于此类的所有现有代码都正常运行。我以为这是一个开放式的重构器。

然后我在使用此类类型的特定边缘情况下在不同解决方案中的不同位置使用它。我试图使用这个

IdentifyingClass* object;
const std::vector<ReturnData>& data_vector = GetDataFromPlace();
if(std::find(data_vector.begin(), data_vector.end(), object) != data_vector.end()))
{
  //do special action;
}

现在我正在生成一个矢量&#39; ==&#39;比较错误告诉我,我没有左手&#39; ==&#39; &#34; const ReturnData&#34;的操作数。

1 个答案:

答案 0 :(得分:1)

我一边看着困惑一边尝试了一些事情,为什么当我的参数处理const时,操作员不是常量。

我已经改变了上面的代码以使用std :: find_if并使用lambda作为我的谓词来解析代码到我想要的功能。

真正的问题是我的操作符没有标记为const:

bool operator==(const ReturnData& query_obj) const
{
  return value == query_obj.value;
}

bool operator==(const IdentifyingClass* query_obj) const
{
  return value == query_obj;
}

我把这个相当微不足道的问题写进堆栈溢出帖子的原因是我发现类似的其他帖子只突出了这些帖子的其他问题而不是这个特定情况,这需要花一点时间才能发现。 / p>

我的问题的主要相关帖子:

Vector is of const objects

Typedef and namespace issue