2011-10-20 17 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. 
関連する問題