2009-02-27 9 views
4

i die folgenden Template-Methode habe,STL Iterators mit benutzerdefinierter Vorlage

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

und ich erhalte die folgenden Kompilierungsfehler (XCode/gcc)

error: expected `;' before 'it'

finde ich jemand anderes mit einem ähnlichen Problem here (read down to see it's the same even though it starts out with a different issue), aber sie scheinen durch Aktualisierung von Visual Studio gelöst zu haben. Das lässt mich vermuten, dass es ein Compiler-Problem ist und dass es kompilieren sollte, ist das korrekt? Die Iteration über die Indizierung von 0 bis zur Größe funktioniert, aber es ist nicht die Art, wie ich diese Funktion implementieren möchte. Gibt es einen anderen Weg? Dank

+0

Hinweis: Sehen Sie im Vorbeigehen „Vektor & Daten“ oder vielleicht „Vektor konst & Daten“ nicht „Vektor Daten“. Die ersten beiden werden eine Referenz auf den Vektor übergeben, der letztere wird eine vollständige Kopie des Vektors machen. –

+0

Natürlich war es nur ein Beispiel :) – DavidG

Antwort

10

Klassischer Fall, wenn das Schlüsselwort typename verwendet werden soll. Hoffe, dass Sie #include -ed vector und iterator haben und eine using namespace std; irgendwo im Umfang haben. Verwenden Sie:

typename vector<T>::iterator it; 

Suchen Sie abhängige Namen. Starten Sie here.

+0

wow danke, genialer Link. – DavidG

0

Versuchen:

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

Nur Fall ist es eine using Aussage fehlt?

+0

Wenn er die using-Anweisung verpasst hätte, würde er auch einen Fehler bei der Funktionssignatur bekommen. –

+0

Nein, meine Namespaces und Includes sind in einem vorkompilierten Header – DavidG

1

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; 
    } 
};