请查看以下代码
LinkedList.h
template <typename T>
class LinkedList
{
public:
T *first;
LinkedList()
{
first = 0;
}
~LinkedList(){}
T *Delete()
{
}
T *Delete(const int key)
{
}
void Display()
{
}
T *Find(const int key)
{
}
void Insert(T* newLink)
{
//newLink->next = first;
//first = newLink;
}
bool IsEmpty()
{
return (first==0);
}
};
Weapon.h
#pragma once
#include "GameObject.h"
#include "Stack.h"
#include "Round.h"
class Weapon :
public GameObject
{
public:
Weapon(int);
~Weapon(void);
Stack <Round> stack1;
Weapon *next;
void Display();
};
Weapon.cpp
#include "Weapon.h"
#include <iostream>
using namespace std;
Weapon::Weapon(int size) : stack1(size)
{
}
Weapon::~Weapon(void)
{
}
在此处,Weapon表示链接列表中的链接。 Next
是指向列表中下一个武器的指针。但我怎么能访问它?我在链接列表的Insert()
方法中的尝试不起作用。我评论过他们。请帮忙!
答案 0 :(得分:1)
void Insert(T* newLink)
{
//newLink->next = first;
//first = newLink;
}
不会“正常”,因为T
是模板类型。它可能包含也可能不包含“next”元素。这是使用模板的错误方法。
T
应该是LinkedList
所拥有的数据类型,而不是LinkedList
本身。
#include <iostream>
using namespace std;
template <typename T>
class LinkedList
{
struct Node {
T data;
struct Node *next;
};
Node *head,*tail;
void init(T& data)
{
if(head == NULL){
head = new Node;
head->data = data;
head->next = NULL;
tail = head;
}
}
public:
LinkedList()
{
head = NULL;
tail = NULL;
}
LinkedList(T& data)
{
head = NULL;
tail = NULL;
init(data);
}
~LinkedList()
{
deleteLinkedList(head);
}
bool IsEmpty()
{
if(head == NULL) return true;
return false;
}
void Display()
{
for(Node *h = head; h != NULL; h=h->next){
cout << h->data;
}
}
void Insert(T data)
{
if(this->IsEmpty()){
init(data);
return;
}
Node *n = new Node;
n->data = data;
n->next = NULL;
tail->next = n;
tail = n;
}
void deleteLinkedList(Node *hd)
{
if(hd->next == tail){
delete tail;
tail = hd;
return;
}
deleteLinkedList(hd->next);
}
};
int main(int argc, char *argv[])
{
LinkedList<int> list;
list.Insert(10);
list.Insert(20);
list.Insert(30);
list.Display();
return 0;
}