2017-12-03 6 views
-1

Ich lerne Datenstruktur mit C++. Ich kopiere den Code in meinen Computer genau wie das Buch mir sagt, aber der Compiler zeigt Chain ist keine Klassenvorlage.Freund Vorlage Klasse in Vorlage Klasse

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

Es ist der Fehler vom Compiler gemeldet: template class error

Wie das Problem zu beheben?

+1

Veröffentlichen Sie keine Screenshots von Fehlermeldungen! –

Antwort

3

Sie müssen die Deklaration Chain vor der Friend-Deklaration weiterleiten, um dem Compiler mitzuteilen, dass es sich um eine Vorlage handelt. d. h.

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

template <class T> 
class ChainNode { 

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

// definition  
template <class T> 
class Chain { 
    ... 
};