使用模板在类(双重链接列表)中定义结构

Defining a struct within a class (doubly linked list) using a template

本文关键字:列表 链接 结构 定义      更新时间:2023-10-16

我已经实现了此类的每种方法,但是我正在为最后一个错误而苦苦挣扎。我得到了指示在linkedlist类的私人部分中定义节点结构的说明。我会得到以下错误:

"错误:节点不是类模板"

"错误:非模板类型'节点'用作模板"

如果我重新排列事物并将节点结构完全放置在类外部,那么我的代码就可以工作,但这并不是我真正想要的解决方案。

#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
typedef int element_type;
template<class element_type>
class linkedlist
{
private:
    struct Node<element_type>{
        Node<element_type>* next;
        Node<element_type>* prev;
        element_type data;
    };
    Node<element_type>* head;
    Node<element_type>* tail;
    unsigned int size;
public:
    linkedlist();
    ~linkedlist();
    void push_back(const element_type& z);
    void push_front(const element_type& z); //add front
    void print() const;
    // will initialize list with n nodes
    explicit linkedlist(unsigned int n);
};

tl; dr版本是删除 Node上的模板语法:

struct Node{
    Node* next;
    Node* prev;
    element_type data;
};
Node* head;
Node* tail;

因为Node是在类模板内定义的,因此它已经可以访问类型element_type。编译器错误只是告诉您在声明不是模板本身的结构时不能使用模板语法。

只需从结构节点删除模板参数即可。

struct Node {
    Node * next;
    Node * prev;
    element_type data;
};
Node * head;
Node * tail;
unsigned int size;