这是一个数组类的程序,在重载操作符[ ]时,若参数i非法,返回空值,但出现错误error C2440: “return”: 无法从“int”转换为“int &”,应该怎么实现?请教高手指点,谢谢!
运行环境vs2005
#include "stdafx.h"
#include <iostream>
using namespace std;
const int DefaultSize = 100;
template <class Type>
class Array
{
Type *elements; //数组存放空间
int ArraySize; //当前长度
void getArray ( ); //建立数组空间
public:
Array( int Size=DefaultSize );
Array( const Array<Type>& x );
~Array( ) { delete [ ]elements;}
Type& operator [ ] ( int i ); //取元素值
};
template <class Type>
void Array<Type>::getArray ( )
{
//私有函数:创建数组存储空间
elements = new Type[ArraySize];
if ( elements == 0 )
{
ArraySize = 0;
cerr << "Memory Allocation Error" << endl;
return;
}
}
template <class Type>
Array<Type>::Array ( int sz )
{
//构造函数
if ( sz <= 0 )
{
ArraySize = 0;
cerr << "非法数组大小" << endl;
return;
}
ArraySize = sz;
getArray ( );
}
template <class Type>
Type & Array<Type>::operator [ ] ( int i )
{
//按数组名及下标 i,取数组元素的值
if ( i < 0 || i > ArraySize-1 )
{
cerr << "数组下标超界" << endl;
return NULL; //error C2440: “return”: 无法从“int”转换为“int &”
}
else
return elements[i];
}
int _tmain(int argc, _TCHAR* argv[])
{
Array<int> a(3);
a[0] = 1;
a[1] = 2;
a[2] = 3;
for (int j = 0; j < 3; j++)
{
cout<<a[j]<<endl;
}
return 0;
}