关于模板的问题
下面是类的声明:
#ifndef DATA_H
#define DATA_H
template <class T>
class Data{
T key; //key word used to sort
Data *arr;
T info; //other informations
public:
Data(int);
virtual void NextBytes (Data *);
void InsertSort(T*,T);
void print(T)const;
~Data();
};
#endif
下面是类的实现:
#include "data.h "
#include <iostream>
using namespace std;
template <class T>
Data <T> ::Data(int n){
arr=(Data *)malloc(sizeof(Data)*n);
}
template <class T>
void Data <T> ::InsertSort(T *pvector,T n){
for(int i=1;i <n;++i)
{
T temp=pvector[i].
}
}
template <class T>
void Data <T> ::NextBytes(arr){
}
template <class T>
Data <T> ::~Data(){
delete[] arr;
}
template <class T>
void Data <T> ::print(T n) const{
for(int i=0;i <n;i++)
cout < <arr[i].key < <endl;
}
在main.cpp里
我用了以下的定义:
Data < int > One(10);//这个不能连接(有错误)
还有一个:Data < int > One (int =10); //这个能编译(但有警告)
想问问怎么能平衡呢?
C++中的模板怎么才能用好呢?
书上写的都很基本,等。。。。。。。
[解决办法]
模板实例化是在编译时进行,因为模板类的实现要放到头文件中,让所有使用者在编译时可见。不能像一般的类的实现那样,放到不同的cpp文件中,仅在连接时可见即可。
[解决办法]
Data < int > One (int =10); //这个能编译(但有警告)
直接传一个整形参数给构造函数就可以了.
对于模版,直接在模版类中给出函数的定义比较好
[解决办法]
Data < int > One (int =10);
应该是这个吧:
Data < int > One (10);
[解决办法]
模板的 声明和实现 的分离,
一般的编译器还不支持这种行为 ~
请把它们放在同一个文件中去 ~
[解决办法]
不要用老旧的编译器(比如vc6)来编译模板类。现在vs2005已经可以很好的支持标准C++了,也支持template定义与实现的分离
[解决办法]
你的NextBytes怎么声明跟实现不一样啊?
[解决办法]
还是哪个原因啊?你把模板的定义和实现都放到同一个文件里了吗?
[解决办法]
arr[i].key=random;
?你怎么把random函数的地址付给key?
[解决办法]
函数名表示的是地址,加上参数以后才是表求调用函数。
[解决办法]
int random(n);?你定义一个局部变量random?