No '==' operator found which takes a left-hand operand of const Type

断了今生、忘了曾经 提交于 2019-12-13 09:49:14

问题


I was refactoring some of my code to use a structure instead of a single object.

As a result of this change I needed to add in the operator for '==' so my existing vector involving functions could correctly evaluate my objects stored in the vectors.

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;
  }
}

All my existing code that relied on this class was functioning correctly. I thought it was an open and shut refactor.

Then I had use of it in a different place in a different solution in a specific edge case that used this class type. I was attempting to use this

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;
}

Now I was generating a vector '==' comparison error telling me I didn't have a left-hand '==' operand of "const ReturnData".


回答1:


I tried a few things while looking with bafflement as to why the operator wasn't const when clearly my parameters were handling const.

It got to the point where I changed my above code to use std::find_if and used a lambda as my predicate to resolve the code to the functionality I wanted.

The real issue was my operators were not marked const:

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

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

The reason I have made this rather trivial issue into a stack overflow post is that other posts I have found similar to this only highlight other issues with those posts and not this specific case, which did take a little while to spot.

Top related posts of my issue:

Vector is of const objects

Typedef and namespace issue



来源:https://stackoverflow.com/questions/41009150/no-operator-found-which-takes-a-left-hand-operand-of-const-type

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!