2012-05-03 14 views
3

임 운영자 < <연산자 << 오류

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

는 첫 번째 인수는 ostream에 개체에 CONST에 refrence이기 때문에 메신저도 CONST를 반환하기 때문에 오류를 받고 그 메신저를 보인다에게 과부하하려고 과부하.

cout << objectOfAnimal1 << objectOfAnimal2 ; 

내가 반환 형식이 하나 운영자의 서명을 변경하는 경우는 잘 작동 : 이미 문제가 당신의 가능한 이유가 정말 무엇인지 설명했습니다

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

ostream에 데이터를 쓰려고하는데, 이것은 매우 'const'연산이 아닙니다! – FatalError

+0

@FatalError는 객체를 modidying하고있는 곳을 알 수 있습니까 – AlexDan

+0

const는 객체가 수정되지 않는다는 것을 의미합니다. cout << objectofanimal1을 쓰면 const로 표시된 ostream에 쓰고있다. 컴파일러는 const가 될 수 없다는 것을 알기에 충분히 똑똑합니다 –

답변

4

는 당신이 필요합니다 : 코드에서

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

당신은 constostream 개체를 수정하려고하는, 그래서 당신이 오류를 얻을.
const 일 수 없습니다.

+0

네, 그게 효과가있을 거라는 것을 압니다. 감사합니다 – AlexDan

+1

@AlexDan : 요점은, 그것은'const' 일 수 없다는 것입니다! 왜냐하면 당신이 객체 상태를 수정하기 때문입니다. –

+0

메신저 ostream 개체에 대해 아무것도 변경하지 마십시오 – AlexDan

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

을 시도하지 않았습니까?