Наследование шаблона класса

187
12 февраля 2018, 04:32

Что не так с конструктором базового шаблона?

#include <iostream>
#include <string>
using namespace std;
template <class T1>
class TypeSize {
public:
    TypeSize(T1 value) {
        this->value = value;
    }
    void DataTypeSize() {
        cout << "value size is " << sizeof(T1) << endl;
    }
private:
    T1 value;
};
template <class T1>
class TypeInfo : public TypeSize<T1> {
public:
    TypeInfo(T1 value) : TypeSize(value) {                 //<<<<<<< Ошибка!
    }
};

int main() {
    int a = 2;
    TypeInfo<int> c(a);
    c.DataTypeSize();
    return 0;
}

Ошибка C2512 TypeSize: нет подходящего конструктора по умолчанию Project1 e:\sources\l_151_classtemplateinheritance.cpp 39

Ошибка C2614 TypeInfo: недопустимая инициализация члена: "TypeSize" не является базовым классом или членом Project1 e:\sources\l_151_classtemplateinheritance.cpp 39

Answer 1

Попробуйте написать

TypeInfo(T1 value) : TypeSize<T1>(value) {

(см. https://ideone.com/Mo8cir)

READ ALSO
Как присвоить строке новое значение в C++?

Как присвоить строке новое значение в C++?

Пробую присвоить строке символов новое значение:

188
undefined reference, или почему не видит объявление?

undefined reference, или почему не видит объявление?

Не могу правильно воспользоваться перегруженной функцией operation<<

292
SDL_CreateThread и барьер памяти

SDL_CreateThread и барьер памяти

До запуска дополнительного потока создается семафор, который используется в создаваемом потоке:

191