Problem mit Template Methode
-
Hallo!
Ich habe folgende Methode:
template <class type> inline OutputStream & operator << (OutputStream & out, const std::vector<type> &v) { std::vector<type>::const_iterator pos = v.begin() ; while (pos != v.end()) { out << *pos++ ; } return out ; }
Ich hab mehrere dieser Art, aber wenn ich nun kompilieren will kommt f
für jede dieser Methoden folgender Fehler:/home/mathias/dev/cpp/tools/convertdts/src/DTSOutputStream.h:364: Fehler: expected
;' vor "pos" /home/mathias/dev/cpp/tools/convertdts/src/DTSOutputStream.h:365: Fehler:
pos' undeclared (first use this function)Weiß jemand wo das Problem liegt? Wo soll da vor "pos" bitte schön noch ein Semikolon? Irgendwie scheint mir die Fehlermeldung falsch zu sein....
Danke für die Antworten im Voraus!
-
typename eventuell?
-
Selbst wenn ich "class" zu "typename" ändere bleibt der Fehler unverändert bestehen.
-
Hallo Mathias,
der Fehler liegt vor dem ersten Erscheinen von pos:
std::vector<type>::const_iterator pos = v.begin()
Sind die zwei Bereichsoperatoren richtig???
Gruss Jerry
-
MAG schrieb:
Selbst wenn ich "class" zu "typename" ändere bleibt der Fehler unverändert bestehen.
So meinte er es:
typename std::vector<type>::const_iterator pos = v.begin();
-
jerry schrieb:
Hallo Mathias,
der Fehler liegt vor dem ersten Erscheinen von pos:
std::vector<type>::const_iterator pos = v.begin()
Sind die zwei Bereichsoperatoren richtig???
Gruss Jerry
Ich sehe hier kein Fehler. Ich vermute auch, dass es an dem fehlenden "typename" liegt. Der G++ kompiliert es zwar, gibt jedoch eine Warnung raus.
-
Die beiden Bereichsoperatoren sind soweit ich weiß richtig.
Und wenn ich das std:: wegnehme dann bekomme ich sogar noch einen Fehler:/home/mathias/dev/cpp/tools/convertdts/src/DTSOutputStream.h:364: Fehler: dependent-name ` std::vector<type,std::allocator<_CharT> >::const_iterator' is parsed as a non-type, but instantiation yields a type
Mal abgesehen von "vector undeclared". Also ist das "std::" wohl richtig.
-
Oh achso. Danke! Jetzt funktioniert es, mit dem "typename" davor.
-
MAG schrieb:
Mal abgesehen von "vector undeclared". Also ist das "std::" wohl richtig.
Solange du nirgend den Namensraum öffnest, musst du
std::
schreiben. Schön, dass es nun funktioniert.