Страницы

Поиск по вопросам

вторник, 5 марта 2019 г.

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

Почему не работает следующий код?
template class A { public : T t; };
template class B : public A { public : T f() { return t; } };
Выдаёт ошибку
In member function 'T B::f()': error: 't' was not declared in this scope T f() { return t; } ^
P.S. Компилятор GCC 6.3.0.


Ответ

Это связано с поиском имен в шаблонных классах. Используйте квалифицированное имя или указатель this. Например,
template class B : public A { public : T f() { return A::t; } };
Или
template class B : public A { public : T f() { return this->t; } };

Комментариев нет:

Отправить комментарий