我有一个名为check的模板化类及其部分特化,现在我公开从类检查的部分特化中继承一个名为childcheck的类。但编译器给出以下错误消息
没有匹配函数来调用`check :: check()'
候选人是:check :: check(const check&)
check :: check(t *)[with t = int *]
查看代码并解释原因
#include<iostream.h>
template<class t>
class check
{
t object;
public:
check(t);
};
//defining the constructor
template<class t>
check<t>::check<t>(t element)
{
cout<<"general templated class constructor"<<endl;
}
//partial specialization
template<class t>
class check<t*>
{
t* object;
public:
check(t*);
};
template<class t>
check<t*>::check<t*>(t* element)
{
cout<<"partial specialization constructor"<<endl;
}
//childcheck class which is derived from the partial specialization
template<class t>
class childcheck:public check<t*>//inheriting from the partial specialization
{
t object;
public:
childcheck(t);
};
template<class t>
childcheck<t>::childcheck<t>(t element):check<t>(element)
{
cout<<"child class constructor"<<endl;
}
main()
{
int x=2;
int*ptr=&x;
childcheck<int*>object(ptr);
cout<<endl;
system("pause");
}
答案 0 :(得分:2)
您继承自check<t*>
但仍调用基类构造函数check<t>
,就好像您从check<t>
继承而来。你想继承哪个check<>
?
我相信你真正想做的是:
template<class t>
class childcheck:public check<t>
如果t
为int*
,那么childcheck<int*>
将从check<int*>
继承,这很好。其余代码可以保持原始问题的方式。
了解Template Partial Specialization at cprogramming.com 你的previous question。