2017-11-22 1 views
-1
friend ostream& operator<<(ostream&, currency&); 

이것은 < < 연산자를 무시하는 선언입니다.cout의 << 연산자를 제대로 무시하는 방법은 무엇입니까?

currency multiply(const double) const; 

이것은 곱셈법의 선언입니다.

I 출력과 같은 a.multiply(2)에 cout을 사용할

컴파일러는 나에게 invalid operands to binary expression ('ostream' (aka 'basic_ostream<char>') and 'currency')를 알려줍니다.

누구나이 오버라이드 기능이 작동하는 방식과 문제를 해결하는 방법을 알려주시겠습니까?

감사합니다.

+1

당신이 출력에 통화를 스트리밍 기대를 rvalue 참조를 사용하여 한 번 더 연산자를 추가 스트리밍 되니? – juanchopanza

+0

일반적으로 쉽게 읽을 수 있습니다 : [연산자 과부하의 기본 규칙 및 숙어는 무엇입니까?] (https://stackoverflow.com/questions/4421706/what-are-the-basic-rules-and-idioms-for-operator- 과부하) – user4581301

답변

1

이 연산자

currency multiply(const double) const; 
^^^^^^^^ 

는 유형 통화의 임시 객체를 생성합니다. 이 연산자 중에

friend ostream& operator<<(ostream&, currency&); 
            ^^^^^^^^^ 

은 상수 참조를 기대합니다. 임시 객체를 상수가 아닌 참조로 바인드 할 수 없습니다.

어느

friend ostream& operator<<(ostream&, const currency&); 
            ^^^^^ 

같은 연산자를 선언하거나 운영자가 변경되면 개체는 통화 개체를 수정

friend ostream& operator<<(ostream&, currency&&); 
            ^^^^^^^^^^^ 
관련 문제