2013-12-21 172 views
1

我正在用C++创建一个蛇的游戏,但我在使用我创建的linkedList类时遇到了一些麻烦。当我用Python制作蛇时,我在列表中列出了列表来表示组成蛇的每个圆的x和y位置。我正在尝试在C++中做类似的事情。这里是我的模板化的LinkedList类我做了,如果由于某种原因,你需要看到它:如何在链接列表中创建链接列表?

#ifndef LLIST_H_INCLUDED 
#define LLIST_H_INCLUDED 
#include <cstddef> 
#include <iostream> 

using namespace std; 

template <class T> 
class linkedList 
{ 
public: 
    class node 
    { 
    public: 
     ///node class attributes 
     T mPayload; 
     node* mNext; 
     ///constructor 
     node(T toucan):mPayload(toucan),mNext(NULL) 
     {} 
     ///destructor 
     ~node() 
     { 
      ///cascading delete 
      if(mNext) 
       delete mNext; 
     } 
     ///node class methods 
    }; 

    ///linkedList class attributes 
    node* mStart; 
    ///constructor 
    linkedList():mStart(NULL) 
    {} 
    ///destructor 
    ~linkedList() 
    { 
     ///initializes the cascading delete. 
     if(mStart) 
      delete mStart; 
    } 
    ///linkedList class methods 
    T mReturnT(int indx) 
    { 
     if(!mStart) 
      return NULL; 
     else 
     { 
      node* cur; 
      for(int i = 0; i<indx; i++) 
      { 
       if(!cur->mNext) 
       { 
        cout << "Indx out of range. Deleting last item." << endl; 
        break; 
       } 
       cur = cur->mNext; 
      } 
      delete cur; 
      return cur->mPayload; 
     } 
    } 

    void mInsert(int indx, T data) 
    { 
     ///Insert an item at a given position. 
     ///The first argument is the index of 
     ///the element before which to insert. 
     node* cur = mStart; 
     for(int i = 0; i < indx; i++) 
     { 
      if(!cur->mNext) 
       break; 
      else 
      { 
       cur = cur->mNext; 
      } 
     } 
     node* N = new node(data); 
     node* temp = cur->mNext; 
     cur->mNext = N; 
     N->mNext = temp; 
    } 

    T mPop() 
    { 
     ///Removes the last item in the list, 
     ///and returns it. 
     if(!mStart) 
      return NULL; 
     else 
     { 
      node* cur = mStart; 
      while(cur->mNext) 
      { 
       cur = cur->mNext; 
      } 
      T var = cur->mPayload; 
      delete cur; 
      return var; 
     } 
    } 

    int mSize() 
    { 
     if(!mStart) 
      return 0; 
     else 
     { 
      node* cur = mStart; 
      int counter = 1; 
      while(cur->mNext) 
      { 
       cur = cur->mNext; 
       counter++; 
      } 
      delete cur; 
      return counter; 
     } 
    } 
    void mPrint() 
    { 
     ///prints all values in a list. 
     node* cur; 
     if(!mStart) 
      cout << "List is empty." << endl; 
     else 
     { 
      cur = mStart; 
      cout << "["; 
      while(cur) 
      { 
       cout << cur->mPayload << " "; 
       cur = cur->mNext; 
      } 
      cout << "]" << endl; 
      delete cur; 
     } 
    } 
    void swapNodes(node* N) 
    { 
     ///idk 
    } 
    void bubbleSort() 
    { 
     if(!mStart) 
      return; 
     node* cur = mStart; 
     while(cur) 
     { 
      cout << cur->mPayload << endl; 
      if(cur->mRight->mFrequency > cur->mFrequency) 
      { 
       swapNodes(cur); 
       cur = mStart; 
      } 
      else 
       cur = cur->mRight; 
     } 
     delete cur; 
    } 

}; 

#endif // LLIST_H_INCLUDED 

现在在我的main.cpp中,我愿做这样的事情,让我有链表的链表:

linkedList<linkedList> p1Snake; 
linkedList<int> startingPiece; 
startingPiece.mInsert(0,600); //This is the starting y position of 
         // p1snake added to the front of the list. 
startingPiece.mInsert(0,350); //This is the starting x position of 
         //p1snake added to the front of the list. 
p1Snake.mInsert(0,startingPiece); 

我的问题出现在该代码的第一行。错误:模板参数列表中的模板类class linkedList的参数1处的类型/值不匹配。我该如何解决这个问题?

+0

我服用swapNodes和冒泡方法超出我的链接列表类。所以现在,他们可以被忽略。 – DebrisHauler

回答

1

lnkedList类有1个模板化的类型T,所以变量定义的语法应该是:

linkedList<type> variableName; 

递归,type可以是linkedList,但它应该仍然在上面的形式(有type)。 因此,例如,如果最后的数据类型为int

linkedList<linkedList<int> > variableName; 
1

这需要成为东西链表的链表:

linkedList<linkedList> p1Snake; 

这些方针的东西:

linkedList< linkedList<something> > p1Snake;