2017-12-03 14 views
-1

私はC++を使ってデータ構造を学習しています。私は本のように自分のコンピュータにコードをコピーしますが、コンパイラはChainがクラステンプレートではないことを示しています。テンプレートクラスの友人テンプレートクラス

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; //指向第一个节点的指针 
}; 

コンパイラによって報告されたエラーがあります:template class error

問題を解決する方法は?

+1

エラーメッセージのスクリーンショットを投稿しないでください。 –

答えて

3

友人宣言の前に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 { 
    ... 
}; 
関連する問題