C++ C++;我能';由于某些原因,我不能让模板在链表中工作,我打赌这是一个简单的错误,但我就是不&x27;我不明白

C++ C++;我能';由于某些原因,我不能让模板在链表中工作,我打赌这是一个简单的错误,但我就是不&x27;我不明白,c++,visual-studio,templates,linked-list,C++,Visual Studio,Templates,Linked List,我必须制作一个与模板一起工作的链表,这样它就可以获取任何类型的数据。这一部分看起来很简单,但出于某种原因,我已经用各种可能的方式修改了我的代码,而我对整个模板的理解似乎还不够 “LinkedList.h” \ifndef链接列表\u H #定义链接列表 使用名称空间std; 模板 班级名单{ 私人: 模板 结构节点{ N数据; 节点*下一步; }; 节点*头; 节点*curr; 节点*温度; 节点*尾部; 公众: list(); void AddNode(N addData); void D

我必须制作一个与模板一起工作的链表,这样它就可以获取任何类型的数据。这一部分看起来很简单,但出于某种原因,我已经用各种可能的方式修改了我的代码,而我对整个模板的理解似乎还不够

“LinkedList.h”

\ifndef链接列表\u H
#定义链接列表
使用名称空间std;
模板
班级名单{
私人:
模板
结构节点{
N数据;
节点*下一步;
};  
节点*头;
节点*curr;
节点*温度;
节点*尾部;
公众:
list();
void AddNode(N addData);
void DeleteNode(N delData);
作废打印列表();
};
模板
列表::列表(){
head=NULL;
curr=NULL;
温度=零;
tail=NULL;
}
模板
无效列表::AddNode(N addData){
node*n=新节点;
n->next=NULL;
n->data=addData;
if(head!=NULL){
curr=头;
while(当前->下一步!=NULL){
当前=当前->下一步;
}
当前->下一步=n;
}
否则{
水头=n;
}
}
模板
无效列表::删除节点(N delData){
node*delPtr=NULL;
温度=水头;
curr=头;
while(curr!=NULL&&curr->data!=delData){
温度=电流;
当前=当前->下一步;
}
if(curr==NULL){
下一步;
温度=零;
} 
删除delPtr;

cout我尝试了你的代码,只得到了一个“隐藏模板参数”,可以通过将你的节点声明移到链表声明之外来解决。然后在list::AddNode(N)中,你必须更正你的N声明

我能够编译它,但我没有深入测试您的代码

#ifndef LINKED_LIST_H
#define LINKED_LIST_H
using namespace std;

template <class N>
struct node{

N data;
node* next;

};

template <class N>
class list{
private:


    node<N>* head;
    node<N>* curr;
    node<N>* temp;
    node<N>* tail;

public:
    list();
    void AddNode(N addData);
    void DeleteNode(N delData);
    void PrintList();

};

template <class N>
list<N>::list(){
    head = NULL;
    curr = NULL;
    temp = NULL;
    tail = NULL;

}

template <class N>
void list<N>::AddNode(N addData){
  node<N>* n = new node<N>; // previously: node<N>* n = new node;
    n->next=NULL;
    n->data = addData;

    if (head != NULL){
        curr = head;
        while (curr->next != NULL){
            curr = curr->next;
        }
        curr->next = n;
    }
    else {
        head = n;
    }
}

template <class N>
void list<N>::DeleteNode(N delData){
    node<N>* delPtr = NULL;
    temp = head;
    curr = head;
    while (curr != NULL && curr->data != delData) {
        temp = curr;
        curr = curr->next;
    }
    if (curr == NULL){
        cout << delData << " Was not in the list." << endl;
        delete delPtr;
    }
    else {
        delPtr = curr;
        curr = curr->next;
        temp->next = curr;
        if (delPtr == head){
            head = head->next;
            temp = NULL;
        } 
        delete delPtr;
        cout << "The value " << delData << " was deleted." << endl;
    }

}

template <class N>
void list<N>::PrintList(){
    curr = head;
    while (curr != NULL) {
        cout << curr->data << endl;
        curr = curr->next;
    }
}

#endif

当你遇到一系列与你所说的类似的错误时(你能把实际的错误包括进来吗?复制粘贴为文本?),请始终查看第一个错误。转到该错误指示的行,该行上是否有问题?否?然后转到上一行(非空,无注释)(错误消息中未报告该行)看看你在那里做了什么。如果前一行是
#include
,那么你检查要包含的头文件的结尾。在
AddNode
中,行
node*n=new node;
在一个地方使用
node
,但在另一个地方只使用
node
#include <iostream>
#include <cstdlib>

#include "LinkedList.h"


int main(){
    list<int> a;
    a.AddNode(3);


    a.PrintList();

    system("pause");

    return 0;
}
#ifndef LINKED_LIST_H
#define LINKED_LIST_H
using namespace std;

template <class N>
struct node{

N data;
node* next;

};

template <class N>
class list{
private:


    node<N>* head;
    node<N>* curr;
    node<N>* temp;
    node<N>* tail;

public:
    list();
    void AddNode(N addData);
    void DeleteNode(N delData);
    void PrintList();

};

template <class N>
list<N>::list(){
    head = NULL;
    curr = NULL;
    temp = NULL;
    tail = NULL;

}

template <class N>
void list<N>::AddNode(N addData){
  node<N>* n = new node<N>; // previously: node<N>* n = new node;
    n->next=NULL;
    n->data = addData;

    if (head != NULL){
        curr = head;
        while (curr->next != NULL){
            curr = curr->next;
        }
        curr->next = n;
    }
    else {
        head = n;
    }
}

template <class N>
void list<N>::DeleteNode(N delData){
    node<N>* delPtr = NULL;
    temp = head;
    curr = head;
    while (curr != NULL && curr->data != delData) {
        temp = curr;
        curr = curr->next;
    }
    if (curr == NULL){
        cout << delData << " Was not in the list." << endl;
        delete delPtr;
    }
    else {
        delPtr = curr;
        curr = curr->next;
        temp->next = curr;
        if (delPtr == head){
            head = head->next;
            temp = NULL;
        } 
        delete delPtr;
        cout << "The value " << delData << " was deleted." << endl;
    }

}

template <class N>
void list<N>::PrintList(){
    curr = head;
    while (curr != NULL) {
        cout << curr->data << endl;
        curr = curr->next;
    }
}

#endif
#include <iostream>
#include <cstdlib>

#include "ll.hpp"


int main(){
    list<int> a;
    a.AddNode(3);
    a.AddNode(5);
    a.AddNode(1);
    a.PrintList();
    a.DeleteNode(4);
    a.PrintList();
    a.AddNode(10);
    a.DeleteNode(3);
    a.PrintList();

    //system("pause");

    return 0;
}
3
5
1
4 Was not in the list.
3
5
1
The value 3 was deleted.
5
1
10