4 Stimmen

STL-Iterator mit benutzerdefinierter Vorlage

Ich habe die folgende Vorlage Methode,

template <class T>
void Class::setData( vector<T> data )
{    
    vector<T>::iterator it;
}

und ich erhalte den folgenden Kompilierungsfehler (XCode/gcc)

Fehler: erwartet `;' vor 'it'

ich habe jemanden gefunden, der ein ähnliches Problem hat hier (lesen Sie weiter unten, um zu sehen, dass es dasselbe ist, auch wenn es mit einem anderen Thema beginnt) aber sie scheinen durch die Aktualisierung von Visual Studio behoben zu sein. Das lässt mich vermuten, dass es ein Compiler-Problem ist und dass es kompiliert werden sollte, ist das richtig? Iteration über die Indizierung von 0 bis Größe funktioniert, aber es ist nicht die Art, die ich bevorzugen würde, um diese Funktion zu implementieren. Gibt es eine andere Möglichkeit, dies zu umgehen? Danke

10voto

dirkgently Punkte 104289

Klassischer Fall für die Verwendung der typename Stichwort. In der Hoffnung, dass Sie #include -ed vector y iterator und haben eine using namespace std; irgendwo im Bereich. Verwenden:

typename vector<T>::iterator it;

Schlagen Sie abhängige Namen nach. Starten Sie aquí .

1voto

Paolo Tedesco Punkte 52228

Ich glaube, Sie vermissen eine typename :

#include <vector>
using namespace std;

class Class{
public:
    template <class T>
    void setData( vector<T> data ) {
        typename vector<T>::iterator it;
    }
};

0voto

Douglas Leeder Punkte 50423

Versuchen Sie es:

template <class T>
void Class::setData( std::vector<T> data )
{    
    std::vector<T>::iterator it;
}

Nur für den Fall, dass es sich um eine vermisste using Aussage?

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