繁体   English   中英

嗨,我正在尝试制作一个从C ++中的链接列表返回子列表的函数

[英]Hi, am trying to make a function that returns a sublist from a linked list in C++

提前致谢。 我正在使用模板类,并且出现错误消息“错误C2955'列表':使用类模板需要模板参数列表”

这是我的清单课

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);
};

我想创建一个列表实例,然后返回子列表

template<class T>
    List<T> List<T>::getSublist(node<T>* rangeFirst, node<T>* rangeLast) {
        return List();
    }
template<class T>
List<T> List<T>::getSublist(node<T>* rangeFirst, node<T>* rangeLast)
//  ^^^ corrections here
{
    return List();
}

仅在模板定义(及其成员的定义)内部,模板的非限定名称( List )等同于完全限定名称( List<T> )。 但是,此处的返回类型都不是,因此必须完全限定。

编辑您的头文件实际上并未声明此成员函数,并且您的代码仍将无法编译。 您必须提供匹配的声明 ,即

template<class T>
class List 
{
    ...    
    List getSublist(node<T>*, node<T>*);   // not a template
};

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

顺便说一句,您可能要考虑让node使用List<T>的嵌套类型。 然后,您可以在所有地方(几乎)用node (几乎)替换node<T> (除非您必须限定它的资格,当它是List<T>::nodetypename List<T>::node )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM