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

186
04 мая 2017, 15:34

Почему не работает следующий код?

template<typename T> class A
{
    public :
        T t;
};
template<typename T> class B : public A<T>
{
    public :
        T f() { return t; }
};

Выдаёт ошибку

In member function 'T B<T>::f()':
error: 't' was not declared in this scope
         T f() { return t; }
                        ^

P.S. Компилятор GCC 6.3.0.

Answer 1

Это связано с поиском имен в шаблонных классах. Используйте квалифицированное имя или указатель this. Например,

template<typename T> class B : public A<T>
{
    public :
        T f() { return A<T>::t; }
};

Или

template<typename T> class B : public A<T>
{
    public :
        T f() { return this->t; }
};
READ ALSO
SFINAE не работает :(

SFINAE не работает :(

Почему не компилируется?

223
Как пользоваться QJsonDocument

Как пользоваться QJsonDocument

Подскажите пожалуйста как пользоваться QJsonDocumentЯ cделал запрос на сервер

463
C++ Парсинг строки

C++ Парсинг строки

Привет всемЕсть строка с аргументами к примеру "Привет, меня зовут %1, мне %2 лет

418
Игнорирование delete для указателя на объект в статической памяти

Игнорирование delete для указателя на объект в статической памяти

"Использование оператора delete на указателе на объект, который не был создан при помощи оператора new, создает непрогнозируемый результат" (сайт...

263