我在做一道c++模板题,描述如下:“为Array类创建一个模板。这个模板允许在编译的时候Array对象实例化指定元素个数的特定的元素类型。”而当我重载输入输出流函数的时候编译总是不通过。编译器显示:[Warning]frienddeclaration'std::istream&operator>>(std::istream&,Array&)'declaresanon-templatefunction[-Wnon-template-friend][Warning]frienddeclaration'std::ostream&operator<<(std::ostream&,constArray &)'declaresanon-templatefunction[-Wnon-template-friend] 代码如下:#include usingnamespacestd;template classArray{private:Tp[n];staticintcount;public:friendistream&operator>>(istream&in,Array&a); friendostream&operator<<(ostream&out,constArray&a); intgetSize(){returnn;}staticintgetArrayCount(){returncount;}};template istream&operator>>(istream&in,constArray&a) {for(inti=0;i{ in>>a.p[i];}a.count++;returnin;}template ostream&operator<<(ostream&out,constArray&a) {for(inti=0;i{ out<} returnout;}在此贴上主函数:intmain(){ArrayintArray1; cin>>intArray1;ArrayintArray2; cin>>intArray2;ArrayfloatArray; cin>>floatArray;cout<<"\nIntArray1contains"<cout<<"ThevaluesinintArrayare:\n"; cout<cout<<"\nIntArray2contains"< cout<<"ThevaluesinintArrayare:\n"; cout<cout<<"\nDoubleArraycontains"< cout<<"ThevaluesinthedoubleArrayare:\n"; cout<cout<<"\nThereare"< ::getArrayCount()<<"Array objects.\n"; cout<<"\nThereare"<::getArrayCount()<<"Array objects.\n"; return0;}我在网上查了很久,也尝试了很多解决方法,可是无论是在istream&operator>>(istream&in,constArray&a)这一行里的>>后面加上<>还是把输入输出函数在类里面定义,都是不行。如果在类里面定义的话,就会显示如下错误:undefinedreferenceto`Array ::count'[Error]ldreturned1exitstatus 如果在>>后面加上<>的话,会显示如下错误:[Error]template-id'operator>><>'indeclarationofprimarytemplate所以现在举步维艰,完全没有头绪。还望各路大神能解答我的疑惑并解释一下为什么会出现以上三种错误。万分感谢!
守候你守候我
相关分类