读书人

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

发布时间: 2012-03-09 16:54:57 作者: rapoo

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


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) {};

读书人网 >C++

热点推荐