Templates und die STL
-
Hallo, ich brauche eine Klasse die einen std::vector beinhaltet, dessen Typ über ein Template übergeben werden soll. Kann mir bitte jemand sagen, warum dieser Code 15 Fehler ausgibt ?. Ich benutze MSV C++ 2008 Express.
template<typename Type> class Iterator { public: std::vector<Type>::iterator operator ()(); std::vector<Type>::iterator operator ()(int pIndex); std::vector<Type>::iterator operator ++(); // Präfix std::vector<Type>::iterator operator ++(int); // Postfix std::vector<Type>::iterator operator --(); // Präfix std::vector<Type>::iterator operator --(int); // Postfix protected: std::vector<Type> mVector; std::vector<Type>::iterator mSelected; };
Und hier noch die Fehler :
Fehler 15 error C2143: Syntaxfehler: Es fehlt ';' vor '--' 38
Fehler 18 error C2143: Syntaxfehler: Es fehlt ';' vor '--' 39
Fehler 3 error C2143: Syntaxfehler: Es fehlt ';' vor '(' 34
Fehler 6 error C2143: Syntaxfehler: Es fehlt ';' vor '(' 35
Fehler 1 error C2143: Syntaxfehler: Es fehlt ';' vor '}' 45
Fehler 9 error C2143: Syntaxfehler: Es fehlt ';' vor '++' 36
Fehler 12 error C2143: Syntaxfehler: Es fehlt ';' vor '++' 37
Fehler 21 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'mSelected' 43
Fehler 4 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 34
Fehler 7 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 35
Fehler 10 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 36
Fehler 13 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 37
Fehler 16 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 38
Fehler 19 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 39
Fehler 22 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 43Grüße Icon²
-
In deinem Code fehlt ein ";" nach dem schließenden "}" um die Klasse.
Ob das der Fehler ist weiß ich aber nicht...
-
typename std::vector<Type>::iterator
-
Vielen Dank für die Schnelle Antwort, aber das war nur ein Kopierfehler mit dem Semikolon. Habs im Beitrag mit Edit geändert. Aber der Fehler wars leider auch nicht.
@Camper: verstehe ich nicht, was soll ein typedef hier denn ändern ?
-
Icon² schrieb:
@Camper: verstehe ich nicht, was soll ein typedef hier denn ändern ?
Lies campers Beitrag nochmal genau. Da steht typename.
Für eine Erklärung siehe zum Beispiel hier:
http://pages.cs.wisc.edu/~driscoll/typename.html
-
Achso, vielen Dank. Ich habe auch Typename gemeint. Sry. Hab wieder schneller geschrieben wir gedacht xD. Aber ich wusste trotzdem nicht wie ich das Typename hätte benutzen sollen, da ich es nur aus den templates gekannt hab und da hätte es mir nichts genutzt.
Aber jetzt hab ich die Lösung. Danke!
template<typename Type> class Iterator { public: typedef typename std::vector<Type>::iterator iter; typedef typename std::vector<Type> vec; iter operator ()(); // Funktionsobject iter operator ()(int pIndex); // iter operator ++(); // Präfix iter operator ++(int); // Postfix iter operator --(); // Präfix iter operator --(int); // Postfix protected: vec mVector; iter mSelected; };
-
Icon² schrieb:
typedef typename std::vector<Type> vec;
Ein typename zuviel.