2017-11-27 20 views
-1

저는 아직 C++을 처음 접했고 약간의 문제가 있습니다. 은 내가 cout << v.getR(); 모든 것이 잘 작동 할 때,하지만 난 < < 연산자를 재정의 할 때 그래서 한 줄에 개체의 모든 정보를 인쇄 할 수는 없다는 오류 제공 : 나는의 재정의를 선언 valjak.cpp|4|error: passing 'const Valjak' as 'this' argument of 'double Valjak::getR()' discards qualifiers [-fpermissive]| 을 (내 책에서 거의 복사 붙여 넣기) 그래서 같은 .HPP : 컴포지션 객체의 << 연산자가 오류를 발생시킵니다. C++

friend ostream & operator << (ostream&, const Valjak &);

과 통화 당에서

는 그래서 그것을 정의 :

ostream& operator << (ostream &out, const Valjak &v) { 
out << "Poluprecnik:\t" << v.getR() << "\nVisina:\t\t" << v.getH() << "\nPovrsina:\t\t" 
    << v.getP() << "\nZapremina:\t\t" << v.getV() << endl; 
return out; 
} 

무엇 I 도이 여기서 틀린거야? 나는 컴포지트 객체에 대한 연산자를 오버라이드 한 적이 없기 때문에 앞으로 이와 같은 오류를 피하는 방법에 대한 지침을 매우 환영합니다. 미리 감사드립니다!

+0

여기에서 설명서를 읽고 잘못된 부분을 찾아보십시오. https://msdn.microsoft.com/en-us/library/1z2f6c2k.aspx –

+0

사용하지 마십시오. 나는 그것이 오버로드라고 불리는 것을 알고있다 : D 그러나 나는 정규 수업을 위해 그것을하는 방법을 안다. 작곡에서 왜 다른가? – Fish

+0

사람들이 이유없이 downvote하지 않았 으면 좋겠다 ... – Fish

답변

0

나는 그것이 const을 get 메소드에 넣지 않고 객체 참조를 const으로 전달하지 않음으로써 알게되었다. 문제가 해결되었습니다.