2015-12-09 2 views
1

Для следующего кода я получил ошибку компиляции в строке реализации как: «B не определяет тип». Я знаю о решении поставить определение функции внутри объявления класса. Возможно ли, однако, иметь определение функции из объявления класса шаблона? БлагодаряC++ Template - In-class Struct

template<typename T> 
class A { 
    public: 
     // ctor, dtor and interface funcs etc 

    private: 
    struct B { 
      T value; 
      B *next; 
    } 

    B *locate(const T& val) const; 

    // blah blah 
}; 

template<typename T> 
B *A<T>::locate(const T& val) const 
{ 
    //logic 
} 

ответ

4

Поскольку B определяется внутри A вы должны квалифицировать его A<T>:::

template<typename T> 
typename A<T>::B *A<T>::locate(const T& val) const 
{ 
    //logic 
} 

typename отметить также, который необходим, потому что B является зависимым именем.

+0

Спасибо, вы находитесь на месте. «Типное имя» - это то, что мне не хватало. –

+0

Подтвержденный Фэн Денг правильный; и это помогло мне понять шаблоны еще больше при вложении других классов или структур в шаблон класса. –