2011-10-20 46 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.