Template: map::const_iterator wird nicht erkannt?



  • Guten Tag,

    der folgende Code erzeugt beim Compilieren eine Fehlermeldung

    template<class K>
    K function(const std::vector<K>& vec, const K& key)
    {
    	std::vector<K>::const_iterator it = vec.begin();
    	if( it == vec.end() )
    		return key;
    	else
    	        return *it;
    }
    

    Fehlermeldung:

    test.cpp:9: Fehler: expected `;' before »it«
    test.cpp:10: Fehler: »it« wurde in diesem Gültigkeitsbereich nicht definiert

    Wo bitte liegt da der Fehler? Wenn ich anstatt des Templates z.B std::string eintrage funktioniert es.

    Vielen Dank für eure Antworten.

    WhiteLife



  • Wenn in Templates komplexere Typen vorkommen, die von Templateparametern abhängen, brauchst du das Schlüsselwort typename , um dem Compiler klarzumachen, dass es sich um einen Typ handelt.

    typename std::vector<K>::const_iterator
    

  • Mod

    template<class K>
    K function(const std::vector<K>& vec, const K& key)
    {
        typename std::vector<K>::const_iterator it = vec.begin(); 
        if( it == vec.end() )
            return key;
        else
                return *it;
    }
    


  • Danke für die Antworten, jetzt geht es 🙂


  • Mod

    WhiteLife schrieb:

    Danke für die Antworten, jetzt geht es 🙂

    Hast du denn auch verstanden, warum es nicht ging? Diese Sache zu verstehen ist wichtig bei der Arbeit mit Templates.


Anmelden zum Antworten