2011-10-20 65 views
3

我有以下幾點:C++:朋友的方法不訪問嵌套類

using namespace std; 

template<class T> class olsm;     
template<class T> istream& operator>>(istream& in, olsm<T>& x); 
template<class T> ostream& operator<<(ostream& out, olsm<T>& x); 

template <class T>            
class olsm { 

    friend istream& operator>> <> (istream& in, olsm& x); 
    friend ostream& operator<< <> (ostream& out, olsm& x); 

    public:         
     class node {       
      public: 
     }; 

     ///Other stuff 
};  

////More stuff 

template<class T> 
ostream& operator<<(ostream& out, olsm<T>& x) { 

    olsm<T>::node* rowNode = x; 

    //Even more stuff! 

    return out; 
} 

但是,當我嘗試編譯我得到的,

error: 'rowNode' was not declared in this scope 

,因爲我上線的錯誤,是奇數我正在努力宣佈。有誰知道爲什麼?

+1

我不認爲這條線將工作 - 想想你在做什麼,分配對象的指針。 – Nim

回答

9

olsm<T>::node*是一個從屬名稱(它取決於一個模板參數)。你需要編寫typename olsm<T>::node*來告訴編譯器它引用了一個類型(默認情況下,編譯器會假定它引用了一個成員)。

有關更詳細的解釋,請參見this question

3

這條線:

olsm<T>::node* rowNode 

應該是:

typename olsm<T>::node* rowNode 
// ^^^^^^^^ You need to specify the member is a typename.