2016-03-22 88 views
0

我正在用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

臨時不能綁定到非常量左值引用。這是暫時的:

M1 + M2 

並且您的操作符將非const引用作爲第2個參數。您可以將其更改爲const解決這個問題:

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

當你在它,你可以改變的operator+參數,使其常量。這是沒有意義的operator+修改操作數:

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

嗯,解決了這個問題。謝謝你指出(y) –

+0

我真的忘了讓它在operator +中保持不變。非常感謝。 –

1

聲明運營商像

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

的問題是,該運營商

Matrix operator+(Matrix& m); 

返回一個臨時對象和tenporary對象可能不受非恆定參考限制。