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

模板以及继承中的的构造函数的有关问题

2012-03-09 
模板以及继承中的的构造函数的问题这是源代码:templateclassTstructNode{Tkey//keywordusedtosortTinfo

模板以及继承中的的构造函数的问题
这是源代码:


template   <class   T>
struct   Node{

T   key;                                   //key   word   used   to   sort
T   info;                                 //other   informations
};
//基类:
template   <class   T>
class   Data{    
Node <T>   *arr;
int   number;
public:
Data(int);
virtual   void   print()const=0;
virtual   ~Data();
};

template <class   T>
Data <T> ::Data(int   n){
number=n;
arr=(Node <T>   *)malloc(sizeof(Node <T> )*number);
srand((unsigned)time(NULL));
for(int   i=0;i <number;++i)
{
arr[i].key=(T)rand();       //rand()%(end-begin+1)+begin;  
}
}  

//派生类:
template   <class   T>
class   InsertData:   public   Data <T> {
public:

void   InsertSort();          
void   BinSort();
void   print()const;
};
我在下面声明了:
InsertData   <int>   One   ;     //这是第一种!


编译结果是:
temp,   配置:   Debug   Win32   ------
正在删除项目“temp”(配置“Debug|Win32”)的中间文件和输出文件
正在编译...
main.cpp
f:\study\temp\temp\main.cpp(8)   :   error   C2512:   “InsertData <T> ”:   没有合适的默认构造函数可用
                with
                [
                        T=int
                ]
生成日志保存在“file://f:\Study\temp\temp\Debug\BuildLog.htm”
temp   -   1   个错误,0   个警告
==========   全部重新生成:   0   已成功,   1   已失败,   0   已跳过   ==========

////////////////////////
下面是第二种:

/////////////////
我声明了:
int   k;
cin   > >   k;
InsertData   <T>   one   (k);
编译结果:
------   已启动全部重新生成:   项目:   temp,   配置:   Debug   Win32   ------
正在删除项目“temp”(配置“Debug|Win32”)的中间文件和输出文件
正在编译...
main.cpp
f:\study\temp\temp\main.cpp(8)   :   error   C2664:   “InsertData <T> ::InsertData”:   不能将参数   1   从“int”转换为“const   InsertData <T>   &”
                with
                [
                        T=int
                ]
                原因如下:   无法从“int”转换为“const   InsertData <T> ”
                with
                [
                        T=int
                ]
                无构造函数可以接受源类型,或构造函数重载决策不明确
生成日志保存在“file://f:\Study\temp\temp\Debug\BuildLog.htm”
temp   -   1   个错误,0   个警告


==========   全部重新生成:   0   已成功,   1   已失败,   0   已跳过   ==========



[解决办法]
加两个构造函数不就行了?

InsertData() : Data <T> (0) {};
InsertData(int n) : Data <T> (n) {};

热点排行