#include <iostream>
using namespace std;
template <typename T>
struct Node
{
T data;
Node <T> *next;
};
template <typename T>
class LinkedList
{
public:
Node <T> *head;
LinkedList()
{
head = NULL;
}
void Insert(T newElement, int position)
{
Node*<T> newNode = new <T> Node();
newNode->data = newElement;
newNode->next = NULL;
if (position < 1)
{
cout << "\nposition should be >= 1.";
}
else if (position == 1)
{
newNode->next = head;
head = newNode;
}
else
{
Node <T> *temp = head;
for (int i = 1; i < position - 1; i++)
{
if (temp != NULL)
{
temp = temp->next;
}
}
if (temp != NULL)
{
newNode->next = temp->next;
temp->next = newNode;
}
else
{
cout << "\nThe previous node is null.";
}
}
}
int main()
{
LinkedList <int> MyList;
MyList.Insert(2312, 1);
MyList.print();
}
Może mi ktoś wyjaśnić dlaczego w linice Node*<T> newNode = new <T> Node(); mam błąd odnośnie brakującego argumentu template po znaku '*' ?
0
1
template<typename T> struct Node
{
T data;
Node *next; // tu wiadomo że to z tej Node<T>
};
0
_13th_Dragon napisał(a):
template<typename T> struct Node { T data; Node *next; // tu wiadomo że to z tej Node<T> };
I tak samo w funkcjach nie trzeba dawać Node <T> tylko wystarczy dać samo Node ?
2
Baxing napisał(a):
I tak samo w funkcjach nie trzeba dawać Node <T> tylko wystarczy dać samo Node ?
W funkcjach oraz metodach innych klas już musisz podać.
Tak a propos: Node<T> *n=new Node<T>();
Oraz próbuj używać analogii:
Node <T> *head;
- jeżeli na to nie krzyczy to czemu dalej kombinujesz zamiast użyć to co sprawdzone:
Node*<T> newNode = new <T> Node();