模板类中的朋友模板类

时间:2017-12-03 13:38:53

标签: c++ templates friend

我正在使用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 个答案:

答案 0 :(得分: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 {
    ...
};