EDIT -- Unten geantwortet, die abgewinkelten Klammern übersehen. Vielen Dank an alle.
Ich habe versucht, eine rudimentäre, einfach verknüpfte Liste zu schreiben, die ich in anderen Programmen verwenden kann. Ich möchte, dass sie mit eingebauten und benutzerdefinierten Typen arbeiten kann, was bedeutet, dass sie eine Vorlage sein muss.
Aus diesem Grund muss mein Knoten auch eine Vorlage sein, da ich die Informationen, die er speichern soll, nicht kenne. Ich habe eine Knotenklasse wie folgt geschrieben -
template <class T> class Node
{
T data; //the object information
Node* next; //pointer to the next node element
public:
//Methods omitted for brevity
};
Meine verknüpfte Liste Klasse ist in einer separaten Klasse implementiert, und muss einen Knoten instanziieren, wenn neue Knoten am Ende der Liste hinzufügen. Ich habe dies wie folgt implementiert -
#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
};
Ich habe eine Treiber-/Testklasse wie folgt eingerichtet -
#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;
}
Ich erhalte jedoch einen Fehler beim Kompilieren - Fehler C2955: 'Node': Verwendung einer Klassenvorlage erfordert Vorlagenargumentliste - die mich auf die folgende Codezeile in meiner add-Methode verweist -
Node* temp = new Node<T>;
Ich verstehe nicht, warum dies keine Informationen über den Typ hat, da es an die verknüpfte Liste übergeben wurde, wenn in meiner Treiberklasse erstellt. Was sollte ich tun, um die Typinformationen an Node zu übergeben?
Sollte ich eine private Knotenstruktur anstelle einer separaten Klasse erstellen und die Methoden beider Klassen in einer Datei kombinieren? Ich bin nicht sicher, ob dies das Problem lösen würde, aber ich denke, es könnte. Ich würde aber lieber getrennte Klassen haben, wenn möglich.
Danke, Andrew.