我有一个节点类,可以存储任何类型的数据。
这是我现在的代码。我收到错误C2059:语法错误:'<'在朋友班名单上;
template <typename T>
class Node{
protected:
T info;
Node *urm;
Node *ant;
public:
int get_info() { return info; }
void set_info(T a) { info = a; }
friend class List<T>;
};
template <typename T>
class List{
protected:
Node<T> *p, *u;
public:
};
答案 0 :(得分:2)
Node
是一个类模板,它需要在实例化时使用模板参数。所以你必须指定它,比如
Node<int> *p, *u; // Nodes of integers
^^^^^
instantiate the template with int
由于您的Node
是一个类模板,我建议将List
作为一个类模板,否则List
会失去操纵任意类型的能力
template <typename T>
class List{
protected:
Node<T> *p, *u;
public:
};
更新(但请不要更改您的代码和问题,最好再问一个新的)
您还应提供List
的前瞻性声明,否则在friend
中声明Node
时无法显示。换句话说,把这一行
template<typename T>
class List; // forward declaration
在Node
的声明之上。
答案 1 :(得分:1)
试试这个:
template<typename T>
class List{
protected:
Node<T> *p, *u;
public:
};
您需要向Node
提供模板参数列表以创建其对象。