我正在使用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; //指向第一个节点的指针
};
如何解决问题?
答案 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 {
...
};