节点:使用类模板需要模板参数列表

时间:2015-05-17 16:20:00

标签: c++ templates

我有一个节点类,可以存储任何类型的数据。

这是我现在的代码。我收到错误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:
};

2 个答案:

答案 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提供模板参数列表以创建其对象。