以下代码哪里报错了#include<iostream> #include<string> using namespace std; template<class T> class DynamicArray { public: DynamicArray(){}//无形参构造函数 DynamicArray(T str[],int size,int Len=10);//形参为字符指针的构造函数 DynamicArray(DynamicArray& s);//实现深拷贝的拷贝构造函数 //~DynamicArray();//删除开辟的空间,防止内存泄漏 void AddItems(T aData[], int aLen); //追加数组元素 bool RemoveAt(int index);//删除数据元素 void InsertItem( int index, T aData);//插入数组元素 void mySort();//数组元素排序 friend ostream& operator <<(ostream& os,const DynamicArray<T> &ar); DynamicArray operator=(DynamicArray &a)//赋值的运算符重载 { if(this!=&a) { this->len=a.len; this->size=a.size; this->pstr=new char[a.len+1]; copy(this->pstr,a.pstr,a.size); } return *this; } private: T *pstr;//存放字符串 int len;//存放字符串长度 int size;//元素个数 }; template<class T> void copy(T *a,T *b); template<class T> ostream& operator <<(ostream& os,const DynamicArray<T> &ar) { os<<ar.pstr[0]; return os; } int main() { char ar[10]; cin>>ar; DynamicArray <char> arr(ar,5); cout<<arr; return 0; } template<class T> void copy(T *a,T *b,int size) { for(int i=0;i<size;i++)//遍历字符串b赋值给字符串a a[i]=b[i]; } template<class T> DynamicArray<T>::DynamicArray(T *str,int Size,int Len=10) :len(Len),size(Size) { pstr=new T[Len]; copy(pstr,str,Size); } template<class T> DynamicArray<T>::DynamicArray(DynamicArray &s) { len=s.len; size=s.size; pstr=new T[s.len]; copy(pstr,s.pstr,s.size); }
时间: 2024-02-22 12:54:46 浏览: 75
#include_iostream.h_
4星 · 用户满意度95%
在这段代码中,copy函数模板的声明和定义中缺少一个参数,应该为:
```
template<class T>
void copy(T *a, T *b, int size);
```
此外,copy函数模板并没有在头文件中声明,应该在头文件中加入以下声明:
```
template<class T>
void copy(T *a, T *b, int size);
```
还有,在DynamicArray类的operator=运算符重载函数中,应该将copy函数模板的调用改为:
```
copy(this->pstr, a.pstr, a.size);
```
这样才能正确拷贝数组元素。
阅读全文