Template-Frage
-
template<class T> void fasdfsdfs(const std::vector<T>& vec) { std::vector<T>::const_iterator it; // (*) }In Zeile (*) sagt mir der Compiler:
src/auxiliary.h: In function ‘void fasdfsdfs(const std::vector<_Tp, std::allocator<_CharT> >&)’: src/auxiliary.h:137: error: expected `;' before ‘it’Ich sehe hier das Problem nicht. Vielleicht bin ich ja auch blind. Aber folgender Code geht problemlos (auch wenn er nicht tut, was ich will):
template<class T> void fasdfsdfs(const std::vector<T>& vec) { std::vector<int>::const_iterator it; // (*) }Hat jemand eine Erklärung?
-
std::vector<T>::const_iteratorIst ein vom Templateargument T abhängiger Bezeichner und könnte je nach konkretem Templateargument bei der Instantiierung einen Typen oder etwas völlig anderes ergeben oder gar nicht existieren (dass "wir" wissen, dass das bei vector immer einen Typen ergeben wird, spielt keine Rolle). Kann nicht bestimmt werden, ob ein abhängiger Bezeichner einen Typen darstellt oder nicht, wird angenommen, dass es kein Typ ist.
x y;ist aber kein syntaktisch mögliches Konstrukt, es sei denn x stellt einen Typ dar.
Für diese Zwecke existiert das Schlüsselwort typenametypename std::vector<int>::const_iterator it;mit dem ausdrücklich spezifiziert würd, dass es sich bei dem bezeichner um einen Typen handelt (und stellt sich beim Instantiieren dann etwas andrees heraus, liegt ein Fehler vor).
-
Das klingt schlüssig, danke.
Magst du mir denn verraten, ob und ggf. wie ich das Problem lösen kann? Mit typename? Wie?
-
Mups schrieb:
Mit typename? Wie?
So, wie camper das beschrieben hat?

typename std::vector<T>::const_iterator it;
-
Nexus schrieb:
Mups schrieb:
Mit typename? Wie?
So, wie camper das beschrieben hat?

typename std::vector<T>::const_iterator it;Das hat camper eben editiert.
Danke euch beiden!
-
Mups schrieb:
Das hat camper eben editiert.
Okay. Ich habe gerade auch noch gesehen, dass bei ihm
intstattTsteht, das dürfte ebenfalls zur Verwirrung beigetragen haben.
-
Nexus schrieb:
Mups schrieb:
Das hat camper eben editiert.
Okay. Ich habe gerade auch noch gesehen, dass bei ihm
intstattTsteht, das dürfte ebenfalls zur Verwirrung beigetragen haben.
solange es zum Nachdenken anregt...