2010-02-28 6 views
1

У меня есть шаблонный чек-код с названием check и его частичная специализация, теперь я публично наследую класс с именем childcheck из частичной специализации проверки класса. но компилятор дает следующее сообщение об ошибке
нет функции соответствия для вызова `проверить :: Check()»
кандидатов: проверить :: чек (Const чек &)
чек :: чек (т *) [с т = 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"); 
} 
+1

Вы должны отступать от своего кода. Также принято использовать прописную первую букву для имен типов, которые являются аргументами шаблона. – Tronic

+0

ok, если я передаю t *, чтобы проверить, то все же компилятор дает ту же ошибку –

+0

не должен ли это иметь тег 'homework'? – vladr

ответ

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.

+0

Нет, сэр, я хочу наследовать от частичной специализации. что не так с предоставленным кодом, пожалуйста, объясните –

+0

, если я напишу childcheck :: childcheck (t element): check (элемент) компилятор все равно дает такое же сообщение об ошибке –

+0

вам нужно написать '....): check (& element) ', который может быть плохим по разным причинам ... вы намерены сохранить копию' element' в вашем 'childcheck ' instance? – vladr

Смежные вопросы