На данный вопрос уже ответили:
Есть проблема, показывает ошибку error C2228: выражение слева от ".name" должно представлять класс, структуру или объединение. Должно вывести тип данных. Код взят с видеоурока:
https://www.youtube.com/watch?v=n6GMKC40gC0
Что не так?
#include <iostream>
using namespace std;
template<class T1>
class TypeSize
{
public:
TypeSize(T1 value)
{
this->value = value;
}
void DataTypeSize()
{
cout << "value = " << sizeof(value) << endl;
}
protected:
T1 value;
};
template<class T1>
class TypeInfo : public TypeSize<T1>
{
public:
TypeInfo(T1 value) : TypeSize<T1>(value)
{
}
void ShowTypeName()
{
cout << "Название типа " << typeid(value).name() << endl;
}
};
int main()
{
setlocale(LC_ALL, "rus");
double a = 2;
TypeInfo<double> c(a);
c.ShowTypeName();
c.DataTypeSize();
return 0;
}
typeid(value).name();
Замените на:
typeid(T1).name()
Или явно укажите:
typeid(TypeSize<T1>::value).name()
P.S. Я обьяснил не так как хотел, поэтому уберу обьснения
Сборка персонального компьютера от Artline: умный выбор для современных пользователей