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

Node : Use of class template requires template argument list

本文关键字:参数 列表 节点      更新时间:2023-10-16

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

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

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的前向声明,否则在Node中声明friend时它不可见。换句话说,把这行

template<typename T>
class List; // forward declaration

在CCD_ 8的声明之上。

试试这个:

template<typename T>
class List{
    protected:
    Node<T> *p, *u;
    public:
};

您需要向Node提供一个模板参数列表来创建其对象。