2015-12-09 75 views
1

对于下面的代码,我在实现行收到编译错误: “B没有定义类型”。 我知道在类声明中放置函数定义的解决方案。但是,是否有可能将模板类声明中的函数定义删除?由于C++模板 - 类结构

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 
} 

还要注意这是必需的,因为B是一个从属名称typename

+0

谢谢,你是现货。 “typename”是我错过的。 –

+0

确认冯登是对的;这有助于我在模板中嵌套其他类或结构时更多地理解模板。 –