возникает ошибка после переопределия оператора =
перегрузил оператор =
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) {
но это уж совсем некрасиво...