10 Stimmen

Schablonen und verschachtelte Klassen/Strukturen

Ich habe einen einfachen Container:

template <class nodeType> list {
    public:
        struct node {
            nodeType info;
            node* next;
        };

    //...
};

Nun gibt es eine Funktion namens _search die die Liste durchsucht und einen Verweis auf den übereinstimmenden Knoten zurückgibt. Nun, wenn ich mich auf den Rückgabetyp der Funktion beziehe, sollte er meiner Meinung nach list<nodeType>::node* . Ist das richtig? Wenn ich die Funktion inline definiere, funktioniert sie 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 Funktion außerhalb der Klasse definiere,

template <class nodeType> list<nodeType>::node* list<nodeType>::_search() {
    //function
}

es funktioniert nicht. Der Compiler gibt eine Fehlermeldung aus Expected constructor before list<nodeType>::_search oder so ähnlich. Der Fehler ist in etwa so. Ich habe derzeit keinen Rechner, auf dem ich es testen kann.

Jede Hilfe ist herzlich willkommen.

24voto

rlbond Punkte 62333

Das liegt daran, dass node ist ein abhängiger Typ. Sie müssen die Signatur wie folgt schreiben (der Übersichtlichkeit halber habe ich sie in 2 Zeilen aufgeteilt)

template <class nodeType> 
typename list<nodeType>::node* list<nodeType>::_search() 
{
    //function
}

Beachten Sie die Verwendung des typename Stichwort.

9voto

Ponting Punkte 906

Sie müssen dem Compiler mitteilen, dass node ist ein Typ, der das Schlüsselwort typename Andernfalls wird es den Knoten für einen static variabel in class list . hinzufügen typename wenn Sie node als Typ in Ihrer Implementierung von list verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X