Шаблоны 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?

Должен ли я создать структуру частного узла вместо отдельного класса и объединить методы обоих классов в одном файле? Я не уверен, что это решит проблему, но я думаю, что может. Я предпочел бы иметь отдельные классы, если это возможно, хотя.

Спасибо, Андрей.

Ответы на вопрос(9)

Ваш ответ на вопрос