возникает ошибка после переопределия оператора =

перегрузил оператор =

void operator = (Vector &other) {
        this->angle = other.angle;
        this->length = other.length;
    }

когда вызываю его то возникает ошибка

No viable overloaded '='

строка на которой возникает ошибка

B1 = B2 + B3;

тоже перегружен оператор +

Vector operator + (Vector &other) {
        double a1 = this->angle * M_PI / 180;
        double a2 = other.angle * M_PI / 180;

        double x1 = this->length * cos(a1);
        double y1 = this->length * sin(a1);
        double x2 = other.length * cos(a2);
        double y2 = other.length * sin(a2);

        double x3 = x1 + x2;
        double y3 = y1+y2;

        return {length = sqrt(x3*x3 + y3*y3), angle = atan2(y3, x3)};
    }

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

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

Смотрите - вы из оператора + возвращаете Vector - т.е. временное значение, rvalue. Но в

void operator = (Vector &other)

вы говорите, что справа от = должно стоять lvalue, что вы будете его менять (да, реально вы его менять не будете, но из сигнатуры следует, что планируете это делать).

Т.е. у вас получается ситуация наподобие

f(int& x) { x = 5; }

с вызовом

f(3)

Вы же не можете менять литерал 3? :)

Так что объясняйте своему оператору, что вы не планируете менять передаваемое значение

void operator = (const Vector &other) {

Ну, конечно, есть еще вариант - передача по значению

void operator = (Vector other) {

но это уж совсем некрасиво...

→ Ссылка