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
It is giving me the following error:
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
 
     
     
    