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

时间:2016-12-05 00:16:35

标签: c++ class struct doubly-linked-list

我已经为这个类实现了每个方法,但我正在努力解决这个最后一个错误。我得到了在类链表的私有部分中定义Node结构的指令。我收到的错误如下:

“错误:节点不是类模板”

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

如果我重新排列内容并将Node结构放在类之外,我的代码就可以工作,但这并不是我想要的解决方案。

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

2 个答案:

答案 0 :(得分:3)

TL; DR版本将删除Node上的模板语法:

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

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

答案 1 :(得分:0)

只需从struct Node中删除template参数即可。

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