不行啊还是求大侠帮忙编译吧,该怎么解决
不行啊还是求大侠帮忙编译吧
照人家抄,可是无法编译,不知问题出在那里,谢谢了!
#ifndef ARRAY_CLASS
#define ARRAY_CLASS
#include <iostream.h>
#include <stdlib.h>
#ifndef NULL
const int NULL=0
#endif//NULL
enum ErrorType
{
invalidArraySize,memoryAllocationError,indexOutOfRange};
char *errorMsg[]=
{
"Invalid array size ", "Memory allocation error ", "Invalid index "
};
template <class T>
class Array
{
private:
T* alist;
int size;
void Error(ErrorType error,int badIndex=0) const;
public:
Array(int sz=50);
Array(const Array <T> &rhs);
T &operator[](int i);
operator T*(void) const;
int ListSize(void) const;
void Resize(int sz);
};
//类成员函数的实现:
template <class T>
void Array <T> ::Error(ErrorType error,int badIndex) const
{
cout < <errorMsg[error];//根据错误类型,输出相应的错误信息
//for indexOutOfRage,print the bad index
if(error==indexOutOfRange)
cout < <badIndex;//如果是下标越界错,输出错误的下标
cout < <endl;
exit(1);
}
//构造函数
template <class T>
Array <T> ::Array(int sz)
{
if(sz <=0)//sz为数组大小(元素个数),若小于0,则输出错误信息
Error(invalidArraySize);
size=sz;//将元素个数赋值给变量size
alist =new T[size];//动态分配size个T类型的元素空间
if(alist==NULL)//如果分配内存不成功,输出错误信息
Error(memoryAllocationError);
}
//析构函数
template <class T>
Array <T> ::~Array(void)
{delete []alist;}
//拷贝构造函数
template <class T>
Array <T> ::Array(const Array <T> &X)
{
//从对象X取得数组大小,并赋值给当前对象的成员
int n=X.size;
size=n;
//为对象申请内存并进行出错检查
alist=new T[n];
if(alist==NULL)//如果分配内存不成功,输出错误信息
Error(memoryAllocationError);
//从对象X复制数组元素到本对象
T* srcptr=X.alist;
T* destptr=alist;
while(n--)
*destptr++=*srcptr++;
}
//重载 "= "运算符,将对象rhs赋值给本对象,实现对象之间的整体赋值
template <class T>
Array <T> & Array <T> ::operator =(const Array <T> & rhs)
{
int n=rhs.size;//取rhs的数组大小
//如果本对象中数组大小与rhs不同,则删除数组原有内存,然后重新分配
if(size!=n)
{
delet [] alist;//删除数组原有内存
alist=new T[n];//重新分配n个元素的内存
if(alist==NULL)//如果分配内存不成功,输出错误信息
Error(memoryAllocationError);
size=n;//记录本对象的数组大小
}
//从rhs向本对象复制元素
T* destptr=alist;
T* srcptr=rhs.alist;
while(n--)
*destptr++=*srcptr++;
//返回当前对象的引用
return *this;
}
//重载下标操作符,实现与普通数组一样通过下标访问元素,并且具有越界检测能力
template <class T>
T& Array <T> ::operator [](int n)
{
//检查下标是否越界
if(n <0||n> size-1)
Error(indexOutOfRange,n);
//返回下标为n的数组元素
return alist[n];
}
//重载指针转换操作符,将Array类的对象名转换为T类型的指针,
//指向当前对象中的私有数组。
//因而可以象使用普通数组首地址一样使用Arrary类的对象名
template <class T>
Array <T> ::operator T*(void) const
{
//返回当前对象中私有数组的首地址
return alist;
}
//取当前数组的大小
template <class T>
int Array <T> ::ListSize(void) const
{
return size;}
//将数组大小修改为sz
照人家抄,可是无法编译,不知问题出在那里,谢谢了!
#ifndef ARRAY_CLASS
#define ARRAY_CLASS
#include <iostream.h>
#include <stdlib.h>
#ifndef NULL
const int NULL=0
#endif//NULL
enum ErrorType
{
invalidArraySize,memoryAllocationError,indexOutOfRange};
char *errorMsg[]=
{
"Invalid array size ", "Memory allocation error ", "Invalid index "
};
template <class T>
class Array
{
private:
T* alist;
int size;
void Error(ErrorType error,int badIndex=0) const;
public:
Array(int sz=50);
Array(const Array <T> &rhs);
T &operator[](int i);
operator T*(void) const;
int ListSize(void) const;
void Resize(int sz);
};
//类成员函数的实现:
template <class T>
void Array <T> ::Error(ErrorType error,int badIndex) const
{
cout < <errorMsg[error];//根据错误类型,输出相应的错误信息
//for indexOutOfRage,print the bad index
if(error==indexOutOfRange)
cout < <badIndex;//如果是下标越界错,输出错误的下标
cout < <endl;
exit(1);
}
//构造函数
template <class T>
Array <T> ::Array(int sz)
{
if(sz <=0)//sz为数组大小(元素个数),若小于0,则输出错误信息
Error(invalidArraySize);
size=sz;//将元素个数赋值给变量size
alist =new T[size];//动态分配size个T类型的元素空间
if(alist==NULL)//如果分配内存不成功,输出错误信息
Error(memoryAllocationError);
}
//析构函数
template <class T>
Array <T> ::~Array(void)
{delete []alist;}
//拷贝构造函数
template <class T>
Array <T> ::Array(const Array <T> &X)
{
//从对象X取得数组大小,并赋值给当前对象的成员
int n=X.size;
size=n;
//为对象申请内存并进行出错检查
alist=new T[n];
if(alist==NULL)//如果分配内存不成功,输出错误信息
Error(memoryAllocationError);
//从对象X复制数组元素到本对象
T* srcptr=X.alist;
T* destptr=alist;
while(n--)
*destptr++=*srcptr++;
}
//重载 "= "运算符,将对象rhs赋值给本对象,实现对象之间的整体赋值
template <class T>
Array <T> & Array <T> ::operator =(const Array <T> & rhs)
{
int n=rhs.size;//取rhs的数组大小
//如果本对象中数组大小与rhs不同,则删除数组原有内存,然后重新分配
if(size!=n)
{
delet [] alist;//删除数组原有内存
alist=new T[n];//重新分配n个元素的内存
if(alist==NULL)//如果分配内存不成功,输出错误信息
Error(memoryAllocationError);
size=n;//记录本对象的数组大小
}
//从rhs向本对象复制元素
T* destptr=alist;
T* srcptr=rhs.alist;
while(n--)
*destptr++=*srcptr++;
//返回当前对象的引用
return *this;
}
//重载下标操作符,实现与普通数组一样通过下标访问元素,并且具有越界检测能力
template <class T>
T& Array <T> ::operator [](int n)
{
//检查下标是否越界
if(n <0||n> size-1)
Error(indexOutOfRange,n);
//返回下标为n的数组元素
return alist[n];
}
//重载指针转换操作符,将Array类的对象名转换为T类型的指针,
//指向当前对象中的私有数组。
//因而可以象使用普通数组首地址一样使用Arrary类的对象名
template <class T>
Array <T> ::operator T*(void) const
{
//返回当前对象中私有数组的首地址
return alist;
}
//取当前数组的大小
template <class T>
int Array <T> ::ListSize(void) const
{
return size;}
//将数组大小修改为sz