C++ C++;我能';由于某些原因,我不能让模板在链表中工作,我打赌这是一个简单的错误,但我就是不&x27;我不明白
我必须制作一个与模板一起工作的链表,这样它就可以获取任何类型的数据。这一部分看起来很简单,但出于某种原因,我已经用各种可能的方式修改了我的代码,而我对整个模板的理解似乎还不够 “LinkedList.h”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
\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