C++ 在c+中实现通用的双链表+;

C++ 在c+中实现通用的双链表+;,c++,list,data-structures,C++,List,Data Structures,我已经实现了一个相当简单的双向链表的概念。我不知道我做错了什么! 我已尝试将节点的成员变量设置为公共变量,但没有帮助。朋友课也没用。这里的非类类型是什么 d_list.h #包括“node.h” #ifndef节点 #定义节点 模板 d类清单{ 私人: int列表大小; T*头; T*尾; 公众: //参数化默认构造函数 d_列表(T*h=nullptr,T*T=nullptr):头(h),尾(T){ //领头 T*gethead(){返回此->头;} T*gettail(){返回此->尾;}

我已经实现了一个相当简单的双向链表的概念。我不知道我做错了什么! 我已尝试将节点的成员变量设置为公共变量,但没有帮助。朋友课也没用。这里的非类类型是什么

d_list.h

#包括“node.h”
#ifndef节点
#定义节点
模板
d类清单{
私人:
int列表大小;
T*头;
T*尾;
公众:
//参数化默认构造函数
d_列表(T*h=nullptr,T*T=nullptr):头(h),尾(T){
//领头
T*gethead(){返回此->头;}
T*gettail(){返回此->尾;}
void addnodeEastail(T*新节点){
如果(此->头==nullptr){
this->head=new\u节点;//this->head将指向new\u节点
这个->尾巴=这个->头;
此->列表大小=列表大小+1;
}
否则{
此->尾=新的_节点;
此->尾->下一个=新节点->上一个;
}
}
};
#恩迪夫
'''

node.h

模板
类节点{
私人:
节点*下一步;
节点*先前;
T数据;
公众:
Node()=默认值;
节点(dta):数据(dta){
~Node(){}
};
main.cpp

#包括
#包括“d_list.h”
使用名称空间std;
int main(){
d_名单d1;
不能

这毫无意义,您的头和尾指针应该是指向列表中第一个和最后一个节点的指针:

Node<T>* head;
Node<T>* tail;
节点*head;
节点*尾部;

在向列表中添加元素时,您需要创建新的
节点
实例来保存数据,并将节点添加到列表中。

问题是
不应该是
t
,而应该是
节点

它们之间没有链接,这只是指向
int
的指针(如果使用类似
new
的内容,则为
int
的列表)。若要创建链接,您需要使用
节点
,这样无论它们存储在内存中的什么位置,它们都将具有逻辑连接。这样,
d_list
就会变成这样:

Node<int>* head;
Node<int>* tail;
节点*head;
节点*尾部;

这将允许您使用节点开发一个逻辑连接的
int
s列表,这正是链接列表所需要的。

为什么您的
main
程序试图向
du列表添加指针
?它不应该使用
int
值简单地调用
add
函数,并且链接列表类需要注意细节?几乎所有的指针都指向“代码>节点< /代码>,而不是<代码> t>代码>。如果我问,为什么你试图在C++中实现双链表?我希望类似的东西:<代码> dyListD1;D1. Advices(10);D1. Addit(20);D1. Adv.Addit(30)。
并期望看到
d_list
在列表中有3项。
main
不应该玩弄指针、
节点等。@PaulMcKenzie收到了!将尝试实现相同的功能。谢谢!
#include<iostream>
#include"d_list.h"
using namespace std;

int main(){

    d_list<int> d1;
    cout<<d1.gethead()<<endl;
    cout<<d1.gettail()<<endl;
    int var=20;
    int* n1= &var;
    int var2 =40;
    int* n2= &var2;
    d1.addnodeastail(n1);
    d1.addnodeastail(n2);
    cout<<d1.gethead()<<endl;
    cout<<d1.gettail()<<endl;
    return 0;
}
In file included from main.cpp:2:
d_list.h: In instantiation of 'void d_list<T>::addnodeastail(T*) [with T = int]':
main.cpp:14:24:   required from here
d_list.h:28:29: error: request for member 'next' in '*((d_list<int>*)this)->d_list<int>::tail', which is of non-class type 'int'
   28 |                 this->tail->next=new_node->previous;
      |                 ~~~~~~~~~~~~^~~~
d_list.h:28:44: error: request for member 'previous' in '* new_node', which is of non-class type 'int'
   28 |                 this->tail->next=new_node->previous;
      |                                  ~~~~~~~~~~^~~~~~~~
template<class T>
class d_list{
    private:
       int list_size;
       T* head;
       T* tail; 
int* head;
int* tail;
Node<T>* head;
Node<T>* tail;
Node<T>* head;
Node<T>* tail;
int* head;
int* tail;
Node<int>* head;
Node<int>* tail;