在FUNCTION常量内调用运算符时出错

时间:2019-07-06 02:45:41

标签: c++ const operator-keyword

现在我正在为C ++代码问题绊脚石。

我做了一个简单的结构'Vector3',因为我定义了operator +。 当我在const函数中使用该运算符时,它会显示一条红线。

struct Vector3 {
    float x, y, z;
    Vector3 operator+ (const Vector3 v) {
        return Vector3(x + v.x, y + v.y, z + v.z);
    };
    Vector3(float x, float y, float z) : x(x), y(y), z(z) {};
};

// and i use it inside some const function
struct SomeST {
  Vector3 a,b;

  Vector3 Function() const
  {
     return a + b; // error
  }
};

如果我从函数中删除const,它就可以工作! 因此,如果有人能够解释幕后的情况,那将是惊人的。 谢谢。

1 个答案:

答案 0 :(得分:1)

功能

Vector3 Function() const

是常量。这意味着this在函数内部是const。这反过来意味着ab都是常量。 a + b语法是编写a.operator + (b)的好方法(用参数operator +在对象a上调用b方法)。现在a是const,因此a.operator +方法也必须是const。由于您尚未提供此类运算符(您编写的运算符不是const),因此编译器会将此错误突出显示为错误,如果尝试对其进行编译,则会出现基于const的错误。

您需要提供operator + (...) const,在这种情况下,这意味着您需要在定义中添加const关键字:

Vector3 operator+ (const Vector3 v) const { ... }