2012-05-03 139 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; 
} 

你已经解释了什么是问题,你可能真的原因没有尝试过?