首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

类模板的有关问题,初级

2012-02-25 
类模板的问题,初级!用类模板创建不同类型的数组,如:int,double,在创建对象时出错了,不知什么原因。请高手指

类模板的问题,初级!
用类模板创建不同类型的数组,如: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); 不是简单的地址赋值,如果你自己的那个程序也要动态分配,那你需要逐个把数组的值赋值给你动态分配的空间,而不是简单的首地址相等

热点排行