C++ 您好,我正在尝试创建一个函数,该函数从C++;

C++ 您好,我正在尝试创建一个函数,该函数从C++;,c++,linked-list,C++,Linked List,提前谢谢。 我正在使用模板类&我收到一个错误,说“error C2955'List”:使用类模板需要模板参数列表“ 这是我的列表类 template <class T> struct node{ T Data; node<T> * prev; node<T> * next; }; template <class T> class List { public: node<T> * front;

提前谢谢。 我正在使用模板类&我收到一个错误,说“error C2955'List”:使用类模板需要模板参数列表“

这是我的列表类

template <class T>
struct node{
    T Data;
    node<T> * prev;
    node<T> * next;
};

template <class T>
class List
{
public:

    node<T> * front;
    node<T> * rear;

    List();
    virtual ~List();

    bool isEmpty();
    void insertFirst(T Data);
    void insertBack(T Data);

    void insertBefore(node<T> * before, T Data);
    void insertAfter(node<T> * after, T Data);

    int removeFirst();
    int removeLast();

    void removeBefore(node<T> * before);
    void removeAfter(node<T> * after);

    node<T> * find(T Data);
    //void destroy();
    void insertRangeBefore(node<T> * before, List<T> range);
    void insertRangeAfter(node<T> * after, List<T> range);
    void removeRange(node<T> * rangeFirst, node<T> * rangeLast);
    template <class T>
    List getSublist(node<T> * rangeFirst, node<T> * rangeLast);
};
模板
结构节点{
T数据;
节点*prev;
节点*下一步;
};
模板
班级名单
{
公众:
节点*前端;
节点*后部;
List();
虚拟列表();
bool是空的();
void insertFirst(T数据);
void insertBack(T数据);
void insertBefore(节点*before,T数据);
void insertAfter(节点*after,T数据);
int removeFirst();
int removeLast();
void removeBefore(节点*before);
无效删除之后(节点*之后);
节点*查找(T数据);
//无效销毁();
void insertRangeBefore(节点*before,列表范围);
void insertRangeAfter(节点*after,列表范围);
void removeRange(节点*rangeFirst,节点*rangeLast);
模板
List getSublist(节点*rangeFirst,节点*rangeLast);
};
我想创建列表的实例,然后返回子列表

template<class T>
    List<T> List<T>::getSublist(node<T>* rangeFirst, node<T>* rangeLast) {
        return List();
    }
模板
列表::getSublist(节点*rangeFirst,节点*rangeLast){
返回列表();
}
您的代码实际上声明了一个模板成员(使用另一个类型
T
作为模板参数)。只需从成员声明中删除行
模板

BTW,您可以考虑使用<代码>节点< /C> >嵌套类型的<代码>列表< /> >。然后,您可以将

节点
替换为
节点
(几乎)无处不在(除非您必须限定它,当它是
列表::节点
类型名称列表::节点

您的代码实际上声明了一个模板成员(使用另一个类型
T
作为模板参数)。只需从成员声明中删除行
模板


BTW,您可以考虑使用<代码>节点< /C> >嵌套类型的<代码>列表< /> >。然后,您可以将

节点
替换为
节点
(几乎)无处不在(除非您必须限定它,当它是
列表::节点
类型名称列表::节点
时除外)。

看起来像
列表
是一个类模板。您忘记提供它的模板参数。就像您在
List::getSublist
List
返回列表()中编写
List
需要
请提供。但是我怀疑
List
是一个模板类,不允许在没有指定模板参数的情况下使用这样的名称。这就是错误消息告诉您的。什么是不清楚的?是的列表是一个类模板对不起,我没有张贴。如何提供其模板参数??您知道如何使用模板吗?看起来
List
是一个类模板。您忘记提供它的模板参数。就像您在
List::getSublist
List
返回列表()中编写
List
需要
请提供。但是我怀疑
List
是一个模板类,不允许在没有指定模板参数的情况下使用这样的名称。这就是错误消息告诉您的。什么是不清楚的?是的列表是一个类模板对不起,我没有张贴。我如何提供它的模板参数??你知道如何使用模板吗?我这样做了,它仍然有一个错误,说“无法将函数定义与现有声明相匹配”,即使我在头文件中已经有一个匹配的函数声明否,你不知道,不客气。如果您愿意接受我的回答,我将不胜感激(单击勾号)。我这样做了,但仍然有一个错误,即“无法将函数定义与现有声明相匹配”,尽管我在标题文件中已经有了匹配的函数声明否,您没有,不客气。如果您能接受我的回答(点击勾号),我将不胜感激。
template<class T>
List<T> List<T>::getSublist(node<T>* rangeFirst, node<T>* rangeLast)
//  ^^^ corrections here
{
    return List();
}
template<class T>
class List 
{
    ...    
    List getSublist(node<T>*, node<T>*);   // not a template
};