С учетом следующего кода:
#include <iostream>
using std::ostream;
class A {
int x;
public:
A(int x) :
x(x) {
}
A& operator+=(const A& a) {
this->x = this->x + a.x;
return *this;
}
friend ostream& operator<<(ostream& os, const A& a);
};
A operator+(const A& a1, const A& a2) {
return A(a1) + a2;
}
ostream& operator<<(ostream& os, const A& a) {
return os << a.x;
}
int main() {
const A a1(2);
A& sum = a1 + a1; // error**************
std::cout << sum;
}
Я получаю следующую ошибку:
неверная инициализация неконстантной ссылки типа «A &» из значения типа «A»
Но я не понимаю, в чем причина этой ошибки.
В общем, я получаю новый объект от operator+
и определяю ссылку (sum
) на этот объект, так в чем же проблема? И как я могу это исправить?