Avatar ·

Wo und warum man die Schlüsselwörter template und typename in C++ setzen muss?

Hallo Kollegen! Ich schreibe seit ein paar Monaten in C++, aber Vorlagen bereiten mir immer noch Kopfschmerzen. Besonders verwirren mich die Schlüsselwörter `template` und `typename`. Ich verstehe, dass sie irgendwie mit abhängigen Namen (dependent names) zusammenhängen, aber in der Praxis bekomme ich ständig Kompilierungsfehler. Hier ist ein konkretes Beispiel, das mich umgehauen hat. Angenommen, ich habe eine Vorlagenklasse eines Containers und möchte eine Funktion schreiben, die Elemente aus einem verschachtelten Iteratortyp ausgibt: ```cpp #include #include template void printFirst(const T& container) { T::const_iterator it = container.begin(); // Fehler! std::cout << *it << std::endl; } int main() { std::vector vec = {1, 2, 3}; printFirst(vec); return 0; } ``` Der Compiler (GCC) gibt aus: `error: need 'typename' before 'T::const_iterator' because 'T' is a dependent scope`. Ich setze `typename` — der Fehler verschwindet. Aber wenn ich etwas Ähnliches mit einer verschachtelten Vorlage versuche,