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