#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. Вы должны поместить все в заголовок.