操作员超载;必须是二进制操作员(具有3个参数)

operator overloading ; must be a binary operator(with 3 parameters)

本文关键字:操作员 具有 3个 参数 超载 二进制      更新时间:2023-10-16

我试图将2D自我避免的随机步行更改为3D。但是我会遇到错误"操作员过载"。有人可以帮助我解决这个问题吗?我的代码附加在下面。


struct Point
{
  int x;
  int y;
  int z;
};
struct Data
{
  int nSteps;
  int maxX;
  int maxY;
  int maxZ;
  int maxRSq;
  int endX;
  int endY;
  int endZ;
};

bool operator == (Point p1, Point p2, Point p3){ **// Operator overloading(must //have binary operator(with 3 parameters))**
  return ((p1.x == p2.x) && (p1.y == p2.y) or (p1.z == p2.z));
}

您无法用三个参数定义operator==。每隔一次想到您所使用的==使用的每次,它总是有两个参数。

似乎您想要的就是这样的东西

bool operator==(Point p1, Point p2) {
    return p1.x == p2.x && p1.y == p2.y && p1.z == p2.z;
}

该版本说 p1p2的x,y和z坐标相等。

==运算符仅需两个参数(不是三个参数(。

在类别中定义它时,一个参数为 this ,另一个参数是在类似的参数列表中定义的:

bool operator ==(const Point& b) const;

如果您现在想比较三个对象,则必须两次调用操作员:

(p1 == p2) && (p2 == p3)