«Для использования шаблона класса требуется список аргументов шаблона» и несколько классов

#c #templates #linked-list

#c #шаблоны #связанный список

Вопрос:

У меня есть файл заголовка для программы, которая использует односвязный список. Данные, которые первоначально хранились в узлах, были целыми числами, однако при попытке использовать класс template я попытался преобразовать класс Node и класс AnyList в классы шаблонов; однако при компиляции появляется сообщение об ошибке «‘Node»: для использования шаблона класса требуется список аргументов шаблона». Я видел примеры классов шаблонов, но возникает небольшая путаница, поскольку я пытаюсь создать два класса шаблонов в одном файле заголовка.

 #ifndef ANYLIST_H
#define ANYLIST_H

#include<iostream>
#include <string>           
using namespace std;

template <typename T>
class Node
{
public:
    Node() : data(0), next(NULL) {}
    Node(Tamp; theData, Node *newNext) : data(theData), next(newNext){}
    Node* getNext() const { return next; }
    T getData( ) const { return data; }
    void setData(Tamp; theData) { data = theData; }
    void setNext(Node *newNext) { next = newNext; }
    ~Node(){}
private:
    T data;     
    Node *next; //pointer that points to next node
};

template <typename T>
class AnyList
{   
     friend ostreamamp; operator<<(ostreamamp; out, const AnyList<T>amp; theList);

public:
    AnyList();  

    void insert(const Tamp; elem);

    int getNumOfElem() const;

    void destroyList();

    ~AnyList();

private:
    Node *first;
    int count;      
 };

#endif
  

Комментарии:

1. Упоминалось ли в этих примерах также, что реализация шаблонов должна полностью размещаться в файле заголовка?

Ответ №1:

Проще говоря, Node<> и List<> — это разные шаблоны. Итак, вам нужно переслать параметр шаблона из List в Node .

Заменить

 Node *first; 
  

Автор:

 Node<T> *first;
  

Комментарии:

1. Спасибо! Я думал, что это одна из моих проблем. Я пробовал это и в конечном итоге получаю ошибки в строках моего .cpp-файла в функциях, где я создаю объекты Node. Появляется та же ошибка.

2. шаблон <имя типа T> аннулирует любой список<T>::insert(const Tamp; elem) { Node newNode = новый узел (элемент, nullptr); if (first == nullptr) first = новый узел; else { Node *temp = первый; while (temp->GetNext() != nullptr) temp = temp->GetNext(); temp-> setNext(newNode); } количество; }

3. @JamieVu вы не можете поместить реализации шаблона в файлы cpp. Вы должны поместить все в заголовок.