fehler beim erstellen eines listen-iterator´s
-
template <class T> void func() { std::list<T>::iterator it; }ich bekomme bei diesem code ein syntaxfehler(";" fehlt vor it) weil er vermutlich iterator nicht kennt.
mit einem konkreten typ funktioniert es.warum tritt hier dieses problem auf und wie kann man es umgehen?
-
typename
-
iterator32131 schrieb:
weil er vermutlich iterator nicht kennt.
natürlich kennt er ihn nicht, weil "list<T>::iterator" kein wirklicher datentyp, sondern nur eine schablone für einen datentyp ist. Du musst irgendwo festlegen, was "T" ist (wahrscheinlich würde es am meisten sinn machen, wenn man die funktion für verschiedene datentypen verwenden kann)
template <class T> void func(T functionParameter) { std::list<T>::iterator it; }dann kann der compiler beim aufrufen der function den datentyp von T bestimmen, und "list<T>::iterator" richtig definieren.
-
std::list<T>::iterator ist ein abhängiger Bezeichner, also brauchen wir typename, da iterator ein Typ sein soll (was sonst ohne Vorgabe eines konkreten T nicht klar ist).
template <class T> void func() { typename std::list<T>::iterator it; }
-
danke für die antworten
-
danke für die antworten
-
Andrey: Nö, den Typ kannste explizit beim Aufruf angeben:
func<int>();
-
Nö, den Typ kannste explizit beim Aufruf angeben
ja, das sowieso, aber dies ist eben nicht unbedingt erforderlich, wenn so eine template funktion eindeutig definiert ist (~so wie bei meiner variante), kann der compiler selbstständig den benötigten typ herleiten.
-
^^ Danke
