2015-12-09 76 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

確認馮登是對的;這有助於我在模板中嵌套其他類或結構時更多地理解模板。 –