2014-07-05 3 views
0

템플릿이있어서 나는 >>에서 과부하 연산자를 사용할 수 없습니다.과부하 연산자 >>

template <class C> class Fract { 
/*some fields*/ 
friend std::ostream& std::operator<<(std::ostream& out, Fract f); 
}; 

내가 그것을 쓸 때, GCC (CodeBlocks)이 기능 템플릿 (템플릿이 아닌)이 아니라고, 나에게 쓸 수 있지만 내가 아는 방법, 서식 범위가 {에}에서 전염됩니다. 어때? 다른 코드를 사용해보십시오 :

template <class C> class Fract { 
/*some fields*/ 
std::ostream& std::operator<<(Fract f); 
}; 

그리고 작동하지 않습니다. 나는 다음과 같이 사용해야한다고 생각한다 :

std::ostream<C>& std::operator<<(Fract f); 

나는 그것을 올바르게 쓸 수 없다. 나 좀 도와 줄 수있어?

UPD : 실제 프로그램에서이 실수는 없습니다!

+3

'표준 : : 연산자 >>'입력에 사용되는 SEE 클래스의 다음과 같은 외부처럼 정의해야합니다. 출력용으로 사용하는 것을 강력히 권합니다. – edmz

+1

또한 누락되었습니다. 마지막 괄호 뒤에. – Veritas

답변

4

당신은

Fract

template <class C> 
std::ostream& operator <<(std::ostream& out, const Fract<C>& f) 
{ 
    // .... 
    return out ; 
} 
HERE

+0

대단히 감사합니다. 작동 중입니다! gcc가 "경고 : 친구 선언 (내 함수)이 템플릿이 아닌 함수를 선언합니다"라고 쓰는 경우 정상입니까? ??? – AC130