ошибка при вызове оператора внутри FUNCTION const - PullRequest
0 голосов
/ 06 июля 2019

Теперь я сталкиваюсь с проблемой кода на C ++.

Я сделал простую структуру Vector3, в которой определил оператор +. и когда я использую этот оператор внутри константной функции, он показывает красную линию.

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 Ответ

1 голос
/ 06 июля 2019

Функция

Vector3 Function() const

является постоянным Это означает, что this является константой внутри функции. Что в свою очередь означает, что оба значения a и b являются постоянными. Синтаксис a + b - это удобный способ написания a.operator + (b) (вызов метода operator + для объекта a с аргументом b). Теперь a является константой, поэтому метод a.operator + также должен быть константным. Поскольку вы не указали такой оператор (оператор, который вы написали, не является константным), ваш компилятор выделяет это как ошибку, и если вы попытаетесь скомпилировать его, вы получите ошибку на основе констант.

Вам необходимо поставить operator + (...) const, что в данном случае означает, что вам нужно добавить ключевое слово const в определение:

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