2016-03-22 3 views
0

Я делаю класс Matrix в C++, но в тестировании, я обнаружил, что высказывания какСоставные операторы с Перегруженные операторы не работают (C++)

cout << M1; //M1 is object of class Matrix 

работают, но другие, как

cout << M1 + M2; //M1 and M2 of class matrix 

дают мне ошибки. Мои заинтересованные перегруженные функции имеют эти прототипы:

//for matrix addition 
Matrix operator+(Matrix& m) 

//for stream insertion operator 
ostream& operator<<(ostream& out, Matrix & m) 

Можете ли вы, ребята, помочь мне, где я ошибаюсь? Я могу опубликовать фактический код, если это необходимо.

+3

'ostream & operator << (ostream & out, const Matrix & m)' – SergeyA

ответ

7

Временные пользователи не могут связываться с неконстантными ссылками lvalue. Временно:

M1 + M2 

и ваш оператор принимает неконстантную ссылку в качестве второго параметра. Вы можете это исправить, изменив его const:

ostream& operator<<(ostream& out, const Matrix & m) 

Пока вы на него, вы можете изменить параметр operator+ и сделать его Const. Это не имеет никакого смысла для operator+ изменить либо операнд:

Matrix operator+(const Matrix& m) const 
+0

Хм, что решает проблему. Спасибо, что указали (y) –

+0

Я действительно забыл сделать его постоянным в operator +. Огромное спасибо. –

1

Declare оператор как

ostream& operator<<(ostream& out, const Matrix & m); 
            ^^^^^^^^^^^^^^^^ 

Проблема в том, что этот оператор

Matrix operator+(Matrix& m); 

возвращает временный объект и tenporary объект может не связаны с непостоянной ссылкой.

Смежные вопросы