Шаблоны C ++ - LinkedList
РЕДАКТИРОВАТЬ - ответил ниже, пропустил угловые скобки. Спасибо всем.
Я пытался написать элементарный односвязный список, который я могу использовать в других программах. Я хочу, чтобы он мог работать со встроенными и пользовательскими типами, то есть он должен быть шаблонным.
Из-за этого мой узел также должен быть шаблонным, так как я не знаю, какую информацию он собирается хранить. Я написал класс узла следующим образом -
template <class T> class Node
{
T data; //the object information
Node* next; //pointer to the next node element
public:
//Methods omitted for brevity
};
Мой класс связанного списка реализован в отдельном классе и требует создания экземпляра узла при добавлении новых узлов в конец списка. Я реализовал это следующим образом -
#include <iostream>
#include "Node.h"
using namespace std;
template <class T> class CustomLinkedList
{
Node<T> *head, *tail;
public:
CustomLinkedList()
{
head = NULL;
tail = NULL;
}
~CustomLinkedList()
{
}
//Method adds info to the end of the list
void add(T info)
{
if(head == NULL) //if our list is currently empty
{
head = new Node<T>; //Create new node of type T
head->setData(info);
tail = head;
}
else //if not empty add to the end and move the tail
{
Node* temp = new Node<T>;
temp->setData(info);
temp->setNextNull();
tail->setNext(temp);
tail = tail->getNext();
}
}
//print method omitted
};
Я настроил драйвер / тестовый класс следующим образом -
#include "CustomLinkedList.h"
using namespace std;
int main()
{
CustomLinkedList<int> firstList;
firstList.add(32);
firstList.printlist();
//Pause the program until input is received
int i;
cin >> i;
return 0;
}
Я получаю ошибку при компиляции, однако -ошибка C2955: «Узел»: использование шаблона класса требует списка аргументов шаблона - который указывает мне на следующую строку кода в моем методе добавления -
Node* temp = new Node<T>;
Я не понимаю, почему это не имеет информации о типе, так как он был передан в связанный список при создании в моем классе драйвера.Что я должен сделать, чтобы передать информацию о типе в Node?
Должен ли я создать структуру частного узла вместо отдельного класса и объединить методы обоих классов в одном файле? Я не уверен, что это решит проблему, но я думаю, что может. Я предпочел бы иметь отдельные классы, если это возможно, хотя.
Спасибо, Андрей.