проблема наследования класса шаблона - PullRequest
3 голосов
/ 17 мая 2011

Подскажите, пожалуйста, что мне не хватает?

template <class T> struct Base
{
    T data;
    Base(const T &_data):data(_data) { }
};

template <class T> struct Derived : Base<T>
{
    Derived():Base(T()) {} //error: class 'Derived<T>' does not have any field named 'Base'
};

Ответы [ 2 ]

8 голосов
/ 17 мая 2011
template <class T> struct Derived : Base<T>
{
    Derived():Base<T>(T()) {} 
};
1 голос
/ 17 мая 2011

Остается вопрос: кто прав? GCC прямо здесь. Неквалифицированный поиск имени не ищет зависимые базовые классы, следовательно, не найдет Base в области действия Base<T>. Вы также можете изменить свой код на следующий стандартный вариант

Derived():Derived::Base(T()) {}

Если я правильно помню, это поддерживается только GCC4.5. Более ранние версии не реализовывали корректный поиск имени класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...