当前位置: 代码迷 >> VC >> 一个关于模板的习题,调试不过去不知为什么?请高手帮忙,该如何处理
  详细解决方案

一个关于模板的习题,调试不过去不知为什么?请高手帮忙,该如何处理

热度:10133   发布时间:2013-02-25 00:00:00.0
一个关于模板的习题,调试不过去不知为什么?请高手帮忙
#include   <iostream>
using   namespace   std;
const   int   DefaultSize=10;

class   Animal
{
public:
Animal(int);
Animal();
~Animal(){}
int   GetWeight()   const{return   itsWeight;}
void   Display(){std::cout < <itsWeight;}

        friend   ostream&   operator < <(ostream&,   const   Animal&);    

private:
int   itsWeight;
};

Animal::Animal(int   weight):itsWeight(weight){}
Animal::Animal():itsWeight(0){}

ostream&   operator < <(ostream&   theStream,   const   Animal&   theAnimal)
{
        theStream < <theAnimal.GetWeight() < <endl;
        return   theStream;
}
template <class   T>
class   Array
{
public:
Array(int   itsSize=DefaultSize);
Array(const   Array   &rhs);
~Array(){delete   []   pType;}

Array&   operator=(const   Array&);
T&   operator[](int   offset){return   pType[offset];}
const   T&   operator[](int   offset)   const{return   pType[offset];}
int   GetSize()   const{return   itsSize;}

        friend   ostream&   operator < <   (ostream&,   Array <T> &);

private:
T   *pType;
int   itsSize;
};

template <class   T>
Array <T> ::Array(int   size):itsSize(size)
{
        pType=   new   T[size];
for(int   i=0;i <size;i++)
pType[i]=0;
}
template <class   T>
Array <T> ::Array(const   Array   &rhs)
{
        itsSize=rhs.GetSize();
pType   =   new   T[itsSize];
for(int   i=0;i <itsSize;i++)
pType[i]=rhs[i];
}
template <class   T>
Array <T> &   Array <T> ::operator   =(const   Array   &rhs)
{
        if(this==&rhs)
                return   *this;
delete   []pType;
itsSize=rhs.GetSize();
        pType=   new   T(itsSize);
for(int   i=0;i <itsSize;i++)
pType[i]=rhs[i];
        return   *this;
}
template <class   T>
ostream&   operator < <(ostream&   output,   Array <T> &theArray)
{
for(int   i=0;i <theArray.GetSize();i++)
output < < "[ " < <i < < "]=\t " < <theArray[i] < <endl;  
return   output;
}

int   main()
{
        Array <int>   theArray;
Animal   myAnimal(10);
cout < <myAnimal < <endl;

for(int   i=0;i <theArray.GetSize();i++)
{
        theArray[i]=i*2;
// cout < <theArray[i] < <endl;   //这个就好用
}
cout < <theArray < <endl;       //始终编译不过去,不知为什么????
return   0;        
}
请高手帮我看看,哪错了

------解决方案--------------------------------------------------------
将友元
template <class T>