我创建了一个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)
编译错误是“无法比较结构”
答案 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。