The friend overload of the template class and the friend overload of ordinary class are different, can refer to this CSDN blog http://blog.csdn.net/ozwarld/article/details/7770808
#include <iostream>using namespacestd; Template<classT>classTest;//template class predecessor declarationTemplate<classT>ostream&operator<< (ostream& out,Consttest<t>& obj);//template class friend predecessor DeclarationTemplate<classT>classTest { Public: Friend Ostream&operator<< <> (ostream& out,Consttest<t>& obj);//template class friend definition, note format "<>"Test (T n=0): num (n) {} Test (Consttest<t>©) {num=Copy.num; } Private: T num; }; Template<classT>ostream&operator<< (ostream& out,Consttest<t>&obj) { out<<obj.num<<Endl; return out; } intMain () {Test<int> t (2); cout<<T; return 0; } //Second Format#include<iostream>using namespacestd; Template<classT>classTest { Public: Template<classS>//Note <class s>sFriend ostream&operator<< (ostream& out,Consttest<s>&obj); Test (T n=0): num (n) {} Test (Consttest<t>©) {num=Copy.num; } Private: T num; }; //Note <class t> and <class s>.Template<classT>ostream&operator<< (ostream& out,Consttest<t>&obj) { out<<obj.num<<Endl; return out; } intMain () {Test<int> t (2); cout<<T; return 0; }
Friend overloading of template classes