模板类析构函数问题请教:
我写一个模板类,简写形式如下:
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;;这样写了怎么会不知道呢