Je ne comprends pas cette erreur de compilation

Le problème exposé dans ce sujet a été résolu.

Bonjour,

J’essaye de coder une fonction qui affiche tous les éléments d’un conteneur séquentiel.
J’utilise les template, mais je ne comprends pas pourquoi je dois ajouter typename au début de la ligne 10 :

#include <iostream>

using std::cout;
using std::endl;
using std::ostream;


template <typename N> void print(const N& container, ostream& out = cout) {
    
    N::const_iterator i;
    for (i = container.begin(); i != container.end(); ++i) {
        out << "elem : " << *i << endl;
    }
    
    out << "-----------" << endl;
}

int main() {
    return 0;
}

Bien que l’erreur de compilation soit explicite, je ne comprends pas pourquoi elle est générée :
test.cpp:10:5: error: need ‘typename’ before ‘N:: const_iterator’ because ‘N’ is a dependent scope

Dans ma tête, ligne 10, le N::const_iterator est parfaitement défini, donc à quoi sert le typename ?

+0 -0

Salut,

Mon C++ est un peu rouillé, mais il me semble que dans le cas d’un type générique (N ici), lors de l’accès à un membre (N::const_iterator), le compilateur n’a pas moyen de savoir si tu accèdes à un attribut de la classe ou à un type.
Le typename permet de lever l’ambiguïté.

PS : Je crois qu’on te l’a déjà indiqué sur un autre sujet, mais utilise les tags sur le sujet plutôt que « [C++] », c’est plus simple pour tout le monde.

Bonjour Entwanne,

PS : Je crois qu’on te l’a déjà indiqué sur un autre sujet, mais utilise les tags sur le sujet plutôt que « [C++] », c’est plus simple pour tout le monde.

entwanne

Pour ma part, je ne comprends pas ta remarque: Indiqué que le problème est relatif au C++ permet de savoir si ça me concerne ou pas, c’est plutôt bien venu pour moi.

D’autre message ne font référence à aucun langage, et parfois il faut attendre les réponses pour savoir que c’est normal qu’on ne comprend pas la question, car c’est pas dans mes compétences!

Bien cordialement

Oui, et l’indiquer avec un tag est encore plus clair. C’est apparent pour tout le monde, ça ne surcharge pas le titre du sujet, ça permet aux gens abonnés au tag de recevoir une notification, ça permet de filtrer les messages, etc. Que des avantages.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte