Klassen in Klassentemplates



  • Hallo
    Ich habe folgendes Problem:
    Eine Klasse

    template <class T> class Stream
    {
      class Iterator
        {
          ....
        }
    };
    

    soll einen Datenstrom darstellen, dessen Zeichen vom Typ T sind.

    nun will ich eine Klasse

    template <class T> class Printer
    {
      void print (Stream<T>::Iterator start);
    };
    

    machen.

    Das geht aber nicht - g++ sagt folgendes:
    error : 'class Stream<T>::Iterator' is not a type

    Jetzt frage ich mich schon, wie das sein kann...
    Entweder ist Stream<T> keine richtige Klasse, sondern bleibt ein template, weil
    kein fester Typ angegeben ist (wäre aber doch irgendwie inkonsistent, oder?), oder ich hab irgendwie nen Syntax- oder Denkfehler. Dass g++ class Stream<T>::Iterator nicht als Typ anerkennt sieht doch auch irgendwie nach Widerspruch aus.
    Der gesamte Code ist natürlich komplexer, ich hab hier nur das wesentliche isoliert, ich würde es also schon gerne so aufbauen, sofern das nicht unmöglich ist.

    Danke schonmal für eure Hilfe!



  • Der Compiler weiß zum Zeitpunkt seiner Arbeit nicht, dass Stream<T>::Iterator ein Typ ist, weil du später im Code eine Spezialisierung für ein bestimmtes T machen könntest, sodass Iterator etwas völlig anderes ist bzw. gar nicht existiert. Deshalb musst du ihm das sagen:

    typename Stream<T>::Iterator
    


  • Das funktioniert wunderbar!
    Hatte zuvor von dem Keyword noch nix gehört...
    Danke!


Anmelden zum Antworten