-1

请看下面的代码

链表.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);
    }
};

武器.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();
};

武器.cpp

#include "Weapon.h"
#include <iostream>

using namespace std;

Weapon::Weapon(int size) : stack1(size)
{

}


Weapon::~Weapon(void)
{
}

在这里,Weapon 表示链接列表中的链接。Next是指向列表中下一个武器的指针。但是我怎样才能访问它?我对链接列表方法的尝试Insert()没有奏效。我评论过他们。请帮忙!

4

1 回答 1

1
    void Insert(T* newLink)
    {
        //newLink->next = first;
        //first = newLink;
    }

不会“工作”,因为T是模板类型。它可能包含也可能不包含“下一个”元素。这是使用模板的错误方式。

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;
}
于 2013-02-27T05:19:37.703 回答