I'm creating a game of snake in C++, but I'm having some trouble utilizing my linkedList class that I've created. When I made snake in Python, I made lists within a list to represent the x and y position of each circle that makes up my snake. I am trying to do something similar in C++. Here is my templatized linkedList class I made if for some reason you need to see it:
#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
Now in my main.cpp, I would like to do something like this so that I have a linked list of linked lists:
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);
My problem arises on the first line of that code. Error: type/value mismatch at argument 1 in template parameter list for 'template class class linkedList. How can I solve this?
This needs to be a linked list of a linked list of something :
linkedList<linkedList> p1Snake;
Something along these lines:
linkedList< linkedList< something > > p1Snake;
Your lnkedList
class has 1 templatized type T
, so the syntax of variable definition should be:
linkedList<type> variableName;
by recursion, type
can be linkedList
, but it should still be in above form (there is type
). So for example if the last data type is int
:
linkedList<linkedList<int> > variableName;
您可能需要参考标题为“链接列表模板和二进制搜索树”的文章: http : //www.cplusplus.com/forum/articles/40773/
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.