对象之间的比较根据顺序引发编译错误

时间:2016-09-06 18:17:53

标签: c++

我创建了一个Point类并重载了他的operator==,以及一个PointSet类,其中包含指向Point个对象的数组。

现在,当我想比较两个对象时,我正在运行到无法解释的编译错误,当我想要比较A == B而不是当B == A时。 即当我正在移动对象的顺序时,该功能就像ecxpected一样工作。 我没有在这两种情况之间找到任何逻辑。

这是Point和PointSet类(diffrenet头文件)

class Point{
public:
    Point(int x, int y);
    ~Point();
    bool operator==(const Point& point);

private:
    int _x, _y;
};

class PointSet
{
public :
    PointSet(const size_t startLen);
    ~PointSet();
    int contains(const Point *point) const

private:
    Point **_pointArray;
    size_t _size;
};

这是operator==

的实施
bool Point::operator ==(const Point& point){
    return (this->_x == point.get_x() && this->_y == point.get_y());
}

这是问题发生的功能

int PointSet::contains(const Point *point) const{
    for (int i=0; i<_size;i++){
        if (*point == *_pointArray[i]){ <-----HERE 
            return i;
        }
    }
    return -1;
}

这不是错误if(*_pointArray[i] == *point)

编译错误是“无法比较结构”

2 个答案:

答案 0 :(得分:1)

你的算子==应该是一个const函数

答案 1 :(得分:0)

尝试实施

bool operator==(const Point& lhs, const PointSet& rhs){ /* do actual comparison */ }

作为朋友会员的功能。还包括:

bool operator==(const PointSet& lhs, const Point& rhs){ /* do actual comparison */ }

这是你保证它会起作用的方式。

有关此内容的更多信息,请here