выражение должно быть допустимым для изменения левосторонним значением в C++(класс)

#include <iostream>
#include <cstring>
using namespace std;
class Move
{
private:
double x;
double y;
public:
Move(double a = 0, double b = 0);// Это конструктор которая прибавляет a и b, x и y
void showmove() const;// Показывает значения x y
Move add(const Move &m) const;// Прибавляет x (из m) вызывающему объекту x, а y(из вызывающего объекта) прибавляется с m.y и присваиваться y из вызывающего объекта.
void reset(double a = 0, double b = 0);// переустанавливает значения x и y
};
Move::Move(double a = 0, double b = 0)
{
    x = a;
    y = b;
}
void Move::showmove() const
{
    cout << "X: " << x << endl;
    cout << "Y: " << y << endl;
}
Move Move::add(const Move &m) const
{
    x = m.x;
    y += m.y;
    Move mv = Move(x, y);
    return mv;
}
void Move::reset(double a = 0, double b = 0)
{
    x = a;
    y = b;
}
int main()
{
    Move first = Move(10.3, 12.5);
    Move second = Move(5.7, 8.4);
    cout << "First Object:\n";
    first.showmove();
    cout << "Second Object:\n";
    second.showmove();
    first.add(second);
    cout << "After changing:\n";
    first.showmove();
    return 0;
}

Привет всем, я написал код в котором есть класс и у неё есть функция элементы а также один конструктор (я написал в коде что они выполняют) но вот в строке 17, 18 указывая на x и y(где определятся функция элемент add) пишет что выражение должно быть допустимым для изменения левосторонним значением. Я новичок в классах и не знаю почему так пишет(с this-> одинаковое пишет), был бы рад вашей помощи, заранее благодарен ;)


Ответы (1 шт):

Автор решения: AlexGlebe

Определение метода константным

Move Move::add(const Move &m) const

запрещает изменение объекта. А переменные x и y это часть объекта, и их нельзя менять.

Уберите константность :

Move Move::add(const Move &m) 
→ Ссылка