Klassen in Klassentemplates
-
Hallo
Ich habe folgendes Problem:
Eine Klassetemplate <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 typeJetzt 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!