Помогите пожалуйста. Что не так? [закрыт]

173
24 ноября 2018, 08:00
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;
}
Answer 1

Первое: При вызове конструктора родителя нужно указать еще и его шаблонные параметры.

Вместо 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);, который вообще непонятно зачем нужен.

READ ALSO
segmentation fault при выводе словаря set

segmentation fault при выводе словаря set

Решаю небольшую задачку на тему словарейПисал подульно, чтобы было можно сразу найти ошибки

170
в чем отличие виртуальной функции от шаблонной функции?

в чем отличие виртуальной функции от шаблонной функции?

Подскажите пожалуйста, чем отличается виртуальная функция от шаблонной функции?

150