2012-05-03 171 views
3

我試着重載操作< <操作符重載<<錯誤

const ostream & operator<<(const ostream& out, const animal& rhs){ 
    out << rhs.a; 
    return out; 
} 

似乎即時得到一個錯誤,因爲IM返回一個常量,也因爲第一個參數是常量refrence對ostream對象。

cout << objectOfAnimal1 << objectOfAnimal2 ; 

它工作得很好,如果我改變了返回類型和運營商簽名這一個:

ostream & operator<<(ostream& out, const animal& rhs) 
+1

您正在嘗試將數據寫入ostream,這不是一個非常「常量」的操作! – FatalError

+0

@FatalError你能告訴我在哪裏修改對象 – AlexDan

+0

const意味着對象不會被修改;當你寫cout << objectofanimal1時,你正在寫入你標記爲const的ostream。編譯器足夠聰明,知道它不能是const –

回答

4

你需要有:

ostream & operator<<(ostream& out, const animal& rhs) 

在你的代碼試圖修改constostream對象,所以你得到的錯誤。
它不應該是const

+0

是的,我知道這會工作,但爲什麼當我改變它const不會工作。謝謝 – AlexDan

+1

@AlexDan:問題是,它不能是'const'!因爲你正在修改對象狀態。 –

+0

Im沒有改變關於ostream對象的任何東西 – AlexDan

1
ostream & operator<<(ostream& out, const animal& rhs){ 
out << rhs.a; 
return out; 
} 

你已經解釋了什麼是問題,你可能真的原因沒有嘗試過?