Vorlagen und verschachtelte Klassen/Strukturen
Ich habe einen einfachen container :
template <class nodeType> list {
public:
struct node {
nodeType info;
node* next;
};
//...
};
Nun, es gibt eine Funktion namens _search
die durchsucht die Liste und gibt eine Referenz auf den Knoten, die aufeinander abgestimmt sind. Nun, wenn ich beziehe mich auf den return-Typ der Funktion, ich denke, es sollte list<nodeType>::node*
. Ist das richtig? Wenn ich definieren Sie die Funktion, inline, es funktioniert perfekt:
template <class nodeType> list {
public:
struct node {
nodeType info;
node* next;
};
node* _search {
node* temp;
//search for the node
return temp;
}
};
Aber, wenn ich die Definition der Funktion außerhalb der Klasse,
template <class nodeType> list<nodeType>::node* list<nodeType>::_search() {
//function
}
funktioniert es nicht. Der compiler gibt eine Fehlermeldung Expected constructor before list<nodeType>::_search
oder so etwas. Der Fehler ist etwas ähnlich wie diese. Ich don ' T haben einen Computer, auf dem ich es testen kann, derzeit.
Jede Hilfe ist herzlich willkommen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
weil
node
ist ein abhängiger Typ. Sie müssen schreiben Sie die Signatur wie folgt (beachten Sie, dass ich gebrochen habe es in 2 Zeilen für Klarheit)Beachten Sie die Verwendung der
typename
Stichwort.Müssen Sie dem compiler, dass
node
ist ein Typ mit dem Schlüsselworttypename
.Sonst wird es denke Knoten alsstatic
variable inclass list
. Hinzufügentypename
immer dann, wenn Sie Knoten als eine Art der Implementierung der Liste.