为什么编译通过了,就是运行不出来啊。
#include <iostream.h>
template < class elemType >
class Array {
public:
explicit Array( int size = DefaultArraySize );
Array( elemType *array, int array_size );
Array( const Array &rhs );
virtual ~Array() { delete [] ia; }
bool operator==( const Array& ) const;
bool operator!=( const Array& ) const;
Array& operator=( const Array& );
int size() const { return _size; }
virtual elemType& operator[](int index){ return ia[index]; }
protected:
static const int DefaultArraySize ;
int _size;
elemType *ia;
};
int DefaultArraySize=12;
int main()
{
const int array_size = 4;
Array <int> ia(array_size);
Array <double> da(array_size);
Array <char> ca(array_size);
int ix;
for ( ix = 0; ix < array_size; ++ix ) {
ia[ix] = ix;
da[ix] = ix * 1.75;
ca[ix] = ix + 'a ';
}
for ( ix = 0; ix < array_size; ++ix )
cout < < "[ " < < ix < < " ] ia: " < < ia[ix]
< < "\tca: " < < ca[ix]
< < "\tda: " < < da[ix] < < endl;
return 0;
}
[解决办法]
没有为数组分配内存,是不是这样改一下;
#include <iostream.h>
template < class elemType >
class Array {
public:
explicit Array( int size = DefaultArraySize )
{
_size = size;
ia = new elemType[_size];
}
Array( elemType *array, int array_size );
Array( const Array &rhs );
virtual ~Array()
{
delete []ia;
}
bool operator==( const Array& ) const;
bool operator!=( const Array& ) const;
Array& operator=( const Array& );
int size() const { return _size; }
virtual elemType& operator[](int index){ return ia[index]; }
protected:
static const int DefaultArraySize ;
int _size;
elemType *ia;
};
template < class elemType >
int Array <elemType> ::DefaultArraySize=12;
int main()
{
const int array_size = 4;
Array <int> ia(array_size);
Array <double> da(array_size);
Array <char> ca(array_size);
int ix;
for ( ix = 0; ix < array_size; ++ix )
{
ia[ix] = ix;
da[ix] = ix * 1.75;
ca[ix] = ix + 'a ';
}
for ( ix = 0; ix < array_size; ++ix )
cout < < "[ " < < ix < < " ] ia: " < < ia[ix]
< < "\tca: " < < ca[ix]
< < "\tda: " < < da[ix] < < endl;
return 0;
}
------解决方案--------------------
因为lz没有实现构造函数,当连接代码时没有发现定义,当然能编译通过,但是却不能生成代码了,像这样写:
explicit Array( int size = DefaultArraySize ){}
类似的还有,
Array( elemType *array, int array_size ){}
Array( const Array &rhs ){}
就能生成实际代码,也就能运行了,不过要运行正确,还必须像 baihe_() 说的那样,为数组分配内存来保存数据,