2017-12-03 4 views
-1

저는 C++을 사용하여 데이터 구조를 배우고 있습니다. 책에 나와있는 것처럼 내 컴퓨터에 코드를 복사하지만 컴파일러에서는 Chain이 클래스 템플릿이 아님을 보여줍니다. template class error템플릿 클래스의 친구 템플릿 클래스

어떻게 문제를 해결하기 위해 :

template <class T> 
class ChainNode{ 
    friend class Chain<T>; 

private: 
    T data; 
    ChainNode<T> *link; 
}; 

template <class T> 
class Chain{ 
public: 
    Chain(){ first = 0; } 
    ~Chain(); 
    bool isEmpty() const { return first == 0;} 
    int Length() const; 
    bool Find(int k, T &x) const; 
    int Search(const T &x) const; 
    Chain<T>& Delete(int k, T &x); 
    Chain<T>& Insert(int k, const T &x); 
    void Output(ostream &out) const; 

private: 
    ChainNode<T> *first; //指向第一个节点的指针 
}; 

컴파일러에 의해보고 된 오류가 무엇입니까?

+1

오류 메시지의 스크린 샷을 게시하지 마십시오! –

답변

3

friend 선언 앞에 Chain 선언을 전달해야 컴파일러에게 템플릿임을 알릴 수 있습니다. 즉

// forward declaration 
template <class T> 
class Chain; 

template <class T> 
class ChainNode { 

    // friend declaration 
    friend class Chain<T>; 
    ... 
}; 

// definition  
template <class T> 
class Chain { 
    ... 
}; 
관련 문제