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

Compare between objects raise compilation error according to order

本文关键字:编译 错误 顺序 之间 比较 对象      更新时间:2023-10-16

我已经创建了一个Point类并重载了他的operator==,和一个PointSet类,它有一个指向Point对象的指针数组。

现在,当我想在两个对象之间进行比较时,当我试图比较A==B而不是B==A时,我遇到了无法解释的编译错误。也就是说,当我翻转对象的顺序时,函数按预期工作。我找不出这两件事有什么逻辑关系。

这是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)

编译错误是"Can't compare structures"

操作符==应该是const函数

尝试实现

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

作为友元成员函数。还包括:

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

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