Мне нужно создать связанный список, который работает с шаблоном, чтобы он мог получить данные любого типа. Эта часть кажется достаточно простой, но по какой-то причине я подернул свой код всеми возможными способами, и мое понимание всего шаблона просто не кажется достаточным.C++ Я не могу заставить шаблоны работать в связанном списке по какой-то причине, я уверен, что это простая ошибка, но я просто не получаю ее
"LinkedList.h"
#ifndef LINKED_LIST_H
#define LINKED_LIST_H
using namespace std;
template <class N>
class list{
private:
template <class N>
struct node{
N data;
node* next;
};
node<N>* head;
node<N>* curr;
node<N>* temp;
node<N>* tail;
public:
list();
void AddNode(N addData);
void DeleteNode(N delData);
void PrintList();
};
template <class N>
list<N>::list(){
head = NULL;
curr = NULL;
temp = NULL;
tail = NULL;
}
template <class N>
void list<N>::AddNode(N addData){
node<N>* n = new node;
n->next=NULL;
n->data = addData;
if (head != NULL){
curr = head;
while (curr->next != NULL){
curr = curr->next;
}
curr->next = n;
}
else {
head = n;
}
}
template <class N>
void list<N>::DeleteNode(N delData){
node<N>* delPtr = NULL;
temp = head;
curr = head;
while (curr != NULL && curr->data != delData) {
temp = curr;
curr = curr->next;
}
if (curr == NULL){
cout << delData << " Was not in the list." << endl;
delete delPtr;
}
else {
delPtr = curr;
curr = curr->next;
temp->next = curr;
if (delPtr == head){
head = head->next;
temp = NULL;
}
delete delPtr;
cout << "The value " << delData << " was deleted." << endl;
}
}
template <class N>
void list<N>::PrintList(){
curr = head;
while (curr != NULL) {
cout << curr->data << endl;
curr = curr->next;
}
}
#endif
и главное, просто чтобы проверить, если функции действительно работают.
#include <iostream>
#include <cstdlib>
#include "LinkedList.h"
int main(){
list<int> a;
a.AddNode(3);
a.PrintList();
system("pause");
return 0;
}
Но они не делают, я получаю 17 ошибок, и все они являются только синтаксические ошибки, которые не имеют никакого смысла, как ; missing before < in line 1
и так. Не могли бы вы сказать мне, что я делаю неправильно? Я знаю, что это должно быть что-то простое, чего я не вижу, потому что я новичок в этом, но это так расстраивает!
Когда вы получите кучу ошибок подобных тем, что вы говорите (пожалуйста, вы можете включать фактические ошибки? скопировать-вставить как текст?), всегда смотрите на * first * error. Перейдите в строку, указанную этой ошибкой, похоже ли, что в этой строке есть проблема? Нет? Затем перейдите к * предыдущей * (непустой, без комментариев) строке (которая не сообщается в сообщениях об ошибках) и посмотрите, что вы там делаете. Если предыдущая строка является «# include», вы проверяете, в какой конец включен загоранный файл. –
В 'AddNode' строка' node * n = new node; 'использует' node 'в одном месте, а просто' node' в другом месте. –