2017-09-06 3 views
1

node 클래스는 친구가 되려면 linked 클래스가 필요합니다. 내가 컴파일 오류가 linked가 클래스 템플릿 아니라고 불평 얻을템플릿 인스턴스 생성을 내 클래스의 친구로 선언하려면 어떻게해야합니까?

template <typename T> 
class node{ 
    T value; 
    node<T> *next; 
    friend class linked<T>; 
}; 

template <typename T> 
class linked{ 
    linked(); 
    ~linked(); 
    node<T> *head; 
}; 

로 썼다. linked<T>node<T>의 친구로 신고하려면 어떻게해야합니까?

답변

3

같은 템플릿 매개 변수 T을 사용하여 linked의 인스턴스를 만들려면 먼저 클래스 템플릿 linked을 전달해야합니다.

// forward declaration 
template <typename T> 
class linked; 

template <typename T> 
class node { 
    ... 
    friend class linked<T>; 
    // or since C++11 you can 
    friend linked<T>; 
}; 

template <typename T> 
class linked { 
    ... 
}; 
0

오류는 문 friend class linked<T>;가 나타날 경우, linked 클래스가 선언되지 않은 것입니다. class node 앞에 다음을 추가하십시오.

template <typename T> 
class linked; 
1

노드 클래스에서 사용하기 전에 다음과 같이 링크 된 클래스를 선언해야합니다. 하지만 코드가이 문제보다 더 지저분 해 보입니다. 그리고 당신이 실제로 시도하고있는 것이 확실하지 않습니다.

template <typename T> 
class linked; 

template <typename T> 
class node{ 
    private: 
    T value; 
    node<T> *next; 
    friend class linked<T>; 
}; 
관련 문제