template<typename T>
class TypeName
{
public:
TypeName(T value)
{
this->value = value;
}
void GetClassSize()
{
cout << (sizeof(value)) << endl;
}
protected:
T value;
};
template<typename T>
class TypeInfo : public TypeName<T>
{
public:
TypeInfo(T value) :TypeName(value)
{
}
void GetTypeName()
{
cout << "Name type: " << typeid(value).name() << endl;
}
};
int main()
{
setlocale(LC_ALL, "ru");
Point pnt(1,3,4);
int a = 1;
TypeInfo<int> c(a);
c.GetClassSize();
c.GetTypeName();
return 0;
}
Первое: При вызове конструктора родителя нужно указать еще и его шаблонные параметры.
Вместо TypeInfo(T value) : TypeName(value)
Нужно TypeInfo(T value) : TypeName<T>(value)
Второе: Раз родитель - шаблон, то к его полям нельзя так просто обратиться. (Подробнее.)
Вместо cout << "Name type: " << typeid(value).name() << endl;
Нужно либо cout << "Name type: " << typeid(this->value).name() << endl;
Либо cout << "Name type: " << typeid(TypeName<T>::value).name() << endl;
Кроме того, из main надо выбросить Point pnt(1,3,4);, который вообще непонятно зачем нужен.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости