2016-10-09 5 views
1
template <typename T> class Queue 
{ 

template<typename T> ostream& operator<< (ostream& print, const Queue <T>& x) 
    { 
     print<<"\nThe elements are as : \n"; 
     if(q.f!=-1) 
     { 
      int fr=q.f,rr=q.r; 
      while(fr<=rr) 
       print<<q.q[fr++]<<" <- "; 
     } 
     print<<endl; 
    } 
    //other stuffs 
}; 

    In main(): 
    Queue<int> q(n); //object creation 
    cout<<q; //calling the overloaded << function 
그것은 내게 다음 오류주고

: 사용하기 위해서는템플릿으로 << 템플릿 오버로드 : 다음 오류가 발생하는 이유는 무엇입니까?

C:\Users\user\Desktop\PROGRAMS\queue_using_classes.cpp|16|error: declaration of 'class T'| 
C:\Users\user\Desktop\PROGRAMS\queue_using_classes.cpp|3|error: shadows template parm 'class T'| 
C:\Users\user\Desktop\PROGRAMS\queue_using_classes.cpp|16|error: 'std::ostream& Queue<T>::operator<<(std::ostream&, const Queue<T>&)' must take exactly one argument 
+0

'섀도우 템플릿 parm'class T''는 그걸로 불분명합니까? – tkausl

+0

그 오류가 무엇인지 모르겠습니다. 템플릿과 함께 << 연산자를 오버로드하려고했습니다. –

+0

"그림자"의 의미를 이해합니까? –

답변

1

을 :

Queue<int> q(n); 
cout << q; 

함수

ostream& operator<<(ostream& print, const Queue <T>& x) 

요구를 비 멤버로서 정의 될 기능. 이 특정 과부하에 대한 추가 정보는 my answer to another question을 참조하십시오.

friend 함수를 선언하는 것은 클래스 템플릿의 경우 까다 롭습니다. 개념을 보여주는 베어 본 프로그램이 있습니다.

// Forward declaration of the class template 
template <typename T> class Queue; 

// Declaration of the function template. 
template<typename T> std::ostream& operator<< (std::ostream& print, const Queue <T>& x); 

// The class template definition. 
template <typename T> class Queue 
{ 

    // The friend declaration. 
    // This declaration makes sure that operator<<<int> is a friend of Queue<int> 
    // but not a friend of Queue<double> 
    friend std::ostream& operator<<<T> (std::ostream& print, const Queue& x); 
}; 

// Implement the function. 
template<typename T> 
std::ostream& operator<< (std::ostream& print, const Queue <T>& x) 
{ 
    print << "Came here.\n"; 
    return print; 
} 

int main() 
{ 
    Queue<int> a; 
    std::cout << a << std::endl; 
} 
관련 문제