@Monstr1986

При наследовании шаблона класса получаю ошибку С2143, в чем причина?

Наследую класс Typeinfo от TypeSize.

TypeSize.h
using namespace std;

template <class T1>
class TypeSize
{
public:
	TypeSize(T1 value);

	void DataTypeSize();

protected:
	T1 value;
};


TypeInfo.h
using namespace std;

template <class T1>
class TypeInfo : public TypeSize<T1> // Здесь получаю C2143 синтаксическая ошибка: отсутствие "," перед "<"
{
public:
	TypeInfo(T1 value);
	
	void ShowTypeName();
};


stdafx.h

#pragma once

#include "targetver.h"
#include <tchar.h>
#include <iostream>

#include "TypeInfo.h"
#include "TypeSize.h"


Подскажите, в чем может быть причина?
  • Вопрос задан
  • 126 просмотров
Решения вопроса 1
myjcom
@myjcom Куратор тега C++
Не знаю зачем вам это нужно, не разобравшись с синтаксисом и прочими базовыми вещами лезть в шаблоны. У Вас там все сплошная ошибка.
SizeType.h
#pragma once
#include <iostream>

template<typename T>
class TypeSize
{
public:
  TypeSize(T v) : value{ v } {};
  ~TypeSize() {};
  void dataTypeSize();
protected:
  T value;
};

template<typename T>
void TypeSize<T>::dataTypeSize()
{
  std::cout << "size: " << sizeof(value) << std::endl;
}

TypeInfo.h
#pragma once
#include <typeinfo> // std::typeid()
#include "TypeSize.h"

template<typename T>
class TypeInfo : public TypeSize<T>
{
public:
  TypeInfo(T v) : TypeSize<T>(v) {};
  ~TypeInfo() {};
  void showTypeInfo();
};

template<typename T>
void TypeInfo<T>::showTypeInfo()
{
  std::cout << "type: " << typeid(this->value).name() << std::endl;
}

main.cpp
#include "TypeInfo.h"

int main()
{
  int a{ 5 };
  TypeInfo<int> infInt(a);
  infInt.dataTypeSize();
  infInt.showTypeInfo();
  std::getchar();
}

Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы