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

模板类析构函数有关问题请问

2012-02-07 
模板类析构函数问题请教:我写一个模板类,简写形式如下:templateclassTclassTemcla{public:Temcla(int10

模板类析构函数问题请教:
我写一个模板类,简写形式如下:
template   <class   T>
class   Temcla
{
public:
        Temcla(int   =   100);
        ~Temcla();
private:
        int   size;
        T   *ptrTemcla;
};

template   <class   T>
Temcla <T> ::Temcla <T> (int   s)
{
        size   =   (s   >   0   ?   s   :   10);
        ptrTemcla   =   new   T[size];
}

template   <class   T>
Temcla <T> ::~Temcla <T> ()
{
        delete   []   ptrTemcla;
}

这个单独编译是没有问题,链接的时候会提示析构函数链接有问题,我想是在析构函数里没法确定ptrTemcla的类型所致,便是怎么解决呢?   怎么把ptrTemcla链上实际的类型?谢谢了.

[解决办法]
出现的什么错误啊,贴个错误的例子

编译器在编译具有template的文件时,将每个源文件中出现的template类定义用具体的类型替换写到相应的obj文件中,链接器将多个obj文件中重复的类型去掉只留一个副本。那么在调用任何函数时去查找响应类型类中的函数就可以了。
[解决办法]
//你看这样符合你的要求不....
#include <iostream>
using namespace std ;
template <class T>
class Temcla
{
public:
Temcla(int size = 100); //这样写不是清楚明了吗。。。。
~Temcla();
private:
int size;
T *ptrTemcla;
};

template <class T>
Temcla <T> ::Temcla < T > (int s)
{
size = (s > 0 ? s : 10);
ptrTemcla = new T[size];
}

template <class T>
Temcla <T> ::~Temcla <T> ()
{
delete [] ptrTemcla;
}
intmain()
{
Temcla < int > D ; //采用这样的方式给它赋实际的类型,下面这种也可以
Temcla < char* > *B = newTemcla < char* > ;
cout < < "fuck! " ;
return0 ;
}
[解决办法]
模版实力话
[解决办法]
加上main()函数,可以正常编译、运行的哦。
[解决办法]
因为ptrStack是T*类型的啊,你都T *ptrStack;;这样写了怎么会不知道呢

热点排行