类模板的问题,初级!
用类模板创建不同类型的数组,如:int,double,在创建对象时出错了,不知什么原因。请高手指点,谢谢!!
//18.3.h
#include <iostream.h>
#if!defined Type_k_
#define Type_k_
template <class Type>
class array
{
public:
array(Type *,int);
~array();
private:
Type *arr;
int size;
};
#endif
///////////////////////////////////////////
//18.3.cpp
#include <iostream.h>
#include "18.3.h "
template <class Type>
array <Type> ::array(Type *ta,int a)
{
size=a;
arr=new int[size];
arr=ta;
}
template <class Type>
array <Type> ::~array()
{
delete [] arr;
}
///////////////////////////////////
#include <iostream.h>
#include "18.3.h "
int main()
{
int iarr[6]={1,2,3,4,5,6};
array <int> intarray(iarr,6);
//intarray.print();
//cout < < "output a number: " < <intarray.show(2) < <endl;
return 0;
}
[解决办法]
arr=new int[size];//arr=new Type[size]
另外,模板的实现文件要放在头文件里。
[解决办法]
一楼都说了。
模板类/函数不允许分离编译,必须在类/函数声明处直接定义。
[解决办法]
#include <iostream.h>
#if!defined A_H
#define A_H
template <class Type>
class array
{
public:
array(Type *ta,int a)
{size=a;
//arr=new int[size];
arr=ta;
}
~array()
{
//delete [] arr;
}
private:
Type *arr;
int size;
};
#endif
/////////////////////
#include <iostream.h>
#include "a.h "
int main()
{
int iarr[6]={1,2,3,4,5,6};
array <int> intarray(iarr,6);
//intarray.print();
//cout < < "output a number: " < <intarray.show(2) < <endl;
return 0;
}
[解决办法]
iarr代表一个内存地址,你分配了内存给arr(是arr指向的地方),然后把iarr的值赋给arr,这时候 iarr和arr指向了一个区域 就是数组iarr,而你原来动态分配的地方已经不受你控制,你delete得是iarr,所以出错
[解决办法]
实在没看懂,你的意思是 int数组赋值给char *p??
[解决办法]
看里面这句代码strcpy(name,str); 不是简单的地址赋值,如果你自己的那个程序也要动态分配,那你需要逐个把数组的值赋值给你动态分配的空间,而不是简单的首地址相等