Problem mit Templatisierung



  • Hi,

    ich habe da ein kleines Problem. Ich muss innerhalb eines Projektes des
    öfteren mal STL-Container abspeichern. Daher wollte ich die Streamoperatoren
    entsprechend überladen. Nun meint der Compiler, dass die Variable vit in Zeile 10 nicht deklariert wäre.
    Wenn ich in Zeile 10 statt vector<T>::const_iterator z.Bsp vector<int>::const_iterator schreibe funktioniert es (halt nur für int-Vektoren).
    Aber dann kann ich das mit dem Template direkt sein lassen.

    #include <iostream>
    #include <vector>
    using namespace std;
    
    template <class T>
    ostream& operator << (ostream& out, const vector<T>& rhs)
    {
      size_t size=rhs.size();
      out << size << " ";
      for(vector<T>::const_iterator vit=rhs.begin(); vit != rhs.end(); ++vit)
      {
        out << *vit << " ";
      }
    
      return out;
    }
    
    int main()
    {return 0;}
    

    Mal schauen was euch dazu einfällt.

    viele Grüße, Sedran.

    PS: Beim vector könnte ich obengenanntes Problem zwar umgehen, indem ich die for-Schleife über richtige Zahlen laufen lasse, aber bei den anderen Containern wie map, set, list, usw. bin ich auf die Iteratoren angewiesen.



  • Versuch's mal mit typename:

    template <class T> 
    ostream& operator << (ostream& out, const vector<T>& rhs) 
    { 
      size_t size=rhs.size(); 
      out << size << " "; 
      for( typename vector<T>::const_iterator vit=rhs.begin(); vit != rhs.end(); ++vit) 
      { 
        out << *vit << " "; 
      } 
    
      return out; 
    }
    


  • Vielen Dank!


Anmelden zum Antworten