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

关于模板的有关问题

2012-02-29 
关于模板的问题下面是类的声明:#ifndefDATA_H#defineDATA_HtemplateclassTclassData{Tkey//keywordused

关于模板的问题
下面是类的声明:
#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?

热点排行