我想检查一个类实例是否已存储在std :: vector中

时间:2015-05-27 13:36:57

标签: c++ vector operator-overloading

我希望标题完全描述我的问题。

运行代码我收到错误:

  

错误C2678:二进制'==':找不到哪个运算符采用tpye'A'的左手操作数(或者没有可接受的转换)“

错误在哪里,如何解决问题?

class A
{
  private: //Dummy Values
    int x;
    int y;
}

class B
{
  private:
    vector <A> dataHandler;

  public:
    bool isElement(A element);
    //Should return true if element exists in dataHandler
}

bool B::isElement(A element)
{
  int length = dataHandler.size();

  for(int i = 0; i<length; i++)
    {
      if(dataHandler[i] == element) //Check if element is in dataHandler
        return true;
    }
  return false;
}

4 个答案:

答案 0 :(得分:4)

isElement内你有

if(dataHandler[i] == element)

这是尝试使用A比较两个operator==实例,但是您的A类没有实现任何此类运算符重载。您可能想要实现类似于此

的一个
class A
{
  private: //Dummy Values
    int x;
    int y;
  public:
    bool operator==(A const& other) const
    {
      return x == other.x && y == other.y;
    }
};

此外,isElement可以使用std::find而不是for循环重写

bool B::isElement(A const& element) const
{
  return std::find(dataHandler.begin(), dataHandler.end(), element) != dataHandler.end();
}

答案 1 :(得分:2)

编译器告诉你一切。为operator==定义class A。将class A更新为以下内容:

class A
{
  private: //Dummy Values
    int x;
    int y;
  public:
    bool operator==(A const& rhs) const
    {
      return x == rhs.x && y == rhs.y;
    }
};

答案 2 :(得分:0)

您必须为类==编写自己的A运算符,例如

bool operator==(const A &rhs) const
{
    return this->x == rhs.x && this->y == rhs.y;
}

否则无法知道如何比较A个对象。

答案 3 :(得分:0)

您必须实施operator==

operator==(内联非成员函数)的示例:

inline bool operator== (const A& left, const A& right){ 
    return left.getX() == right.getX() && left.getY() == right.getY();
}