Je ne comprends pas cette erreur de compilation

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

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 ?

Édité par anonyme

+0 -0

Cette réponse a aidé l’auteur du sujet

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

+0 -0

Cette réponse a aidé l’auteur du sujet

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.

Auteur du sujet

Merci pour les réponses !
J’aime moins les tags, ils mettent la lettre C de C++ en minuscule automatiquement, mais au vue des avantages, je veux bien les utiliser pour mes prochains sujets vu que ça permet d’en notifier ceux qui sont abonnés. :)

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

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