IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Utilisation de <list>


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 45
    Par défaut Utilisation de <list>
    Bonjour,

    J'ai écrit le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include <list>
     
    void toto ()
    {
         list<int> a;
    }
    et j'obtiens les messages suivants à la compilation avec VisualC++ :
    toto.cpp(6): error C2065: 'list' : identificateur non déclaré
    toto.cpp(6): error C2062: type 'int' inattendu

    Je ne comprends pas pourquoi ma liste n'est pas reconnue.
    Quelqu'un pourrait-il m'aider ?

    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonsoir,

    list se trouve dans le namespace std. std::list
    http://www.cplusplus.com/reference/list/list/
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 45
    Par défaut
    Oui, en effet !
    Je suis tellement habitué à voir des lignes "using namespace std;" que je n'y fais plus attention ... et du coup j'avais complétement oublié ces histoires de namespace.

    Merci pour ta réponse

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,
    Citation Envoyé par genetin Voir le message
    Oui, en effet !
    Je suis tellement habitué à voir des lignes "using namespace std;" que je n'y fais plus attention ... et du coup j'avais complétement oublié ces histoires de namespace.

    Merci pour ta réponse
    En fait, tu ferais bien de prendre l'habitude inverse :

    Supprimer l'utilisation de using namespace std de ton système de pensée, et systématiquement utiliser le nom pleinement qualifié pour tout ce qui est issu de l'espace de noms std.

    La dirctive using, dans le contexte de cette discussion (parce que C++11 est venue avec une nouvelle manière de l'utiliser) ne peux déjà pas être utilisée dans un fichier d'en-tête (ou du moins, on le déconseille très fortement) au mobile tout à fait justifier que le développeur qui l'écrit dans un fichier d'en-tête perd littéralement le contrôle des fichiers d'implémentation dans lesquels elle aura de l'effet, avec pour conséquence potentielle de provoquer des ambiguités que les espaces de noms tentent justement d'éviter parfois très loin de l'endroit où elles sont placées à cause des inclusions en cascades.

    il "n'est pas plus mal" de se dire que, finalement, cela ne demande pas bien longtemps d'écire std:: à chaque fois que l'on a recours à quelque chose issu du standard et que cela permet en plus d'être plus clair quant à l'origine des éléments manipulés (parce que tu pourrais très bien avoir une variable don le nom est list ).

    La conséquence de cette manière de voir les choses, c'est que la directive using ne devrait pour ainsi dire plus être utilisée dans ce contexte. Cela aurait en outre l'avantage de "réserver" son usage à celui qui est apparu avec C++11, à savoir celui de permettre la création de typedef template.

    Il faut bien comprendre que les espaces de noms ne sont pas là pour "faire ch...er" le développeur, mais pour lui faciliter la vie lorsqu'il doit utiliser plusieurs (de nombreuses ) bibliothèques tierces proposant des fonctionnalités similaires.

    En C, on préfixe systématiquement les noms de structures et de fonction de quelques lettres qui indiquent la bibliothèque d'origine (ou du moins, on devrait le faire). En C++, on utilise les espaces de noms qui agissent littéralement comme une "boite noire" regroupant l'ensemble des possibilités apportées.

    Il est, d'une certaine manière, dommage d' "ouvrir la boite de pandore" en utilisant la directive using namespace, parce que cela a pour au final pour seul résultat de faire sauter la sécurité apportée par cette boite noire.

    Il faut cependant admettre que, comme les espaces de noms sont comme des poupées russes (un espace de noms peut contenir un espace de noms qui peut lui-même contenir un espace de noms), il peut assez facilement devenir long et fastidieux de recopier systématiquement tout le chemin permettant d'accéder à un sous-sous-sous(...) espace de noms, même si l'intellisense des éditeurs nous mâche le travail.

    Mais, plutôt que d'utiliser la directive using namespace, il est préférable de créer ce que l'on appelle un alias sous une forme qui pourrait ressembler à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    namespace premier{
    namespace deuxieme{
    namespace troisieme_espace_de_noms{
    /* Le nom pleinement qualifié est 
     * premier::deuxieme::troisieme_espace_de_noms::MyStruct.... oufff...
     */
    struct MyStruct{
    int x;
    int y;
    };
    }
    }
    }
    /* simplifions le nom pour qu'il soit plus facile d'accéder à MyStruct */
    namespace pdt =premier::deuxieme::troisieme_espace_de_noms;
    int main(){
        /* le nom d'origine fonctionne toujours */
        premier::second::troisieme_espace_de_nom::MyStruct s1;
        /* mais on peut aussi accéder à MyStruct depuis pdt */
        pdt::MyStruct s2;
        /* ... */
        return 0;
    }
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation d'une liste déroulante
    Par nico-icf dans le forum Langage
    Réponses: 8
    Dernier message: 21/11/2006, 09h01
  2. Utilisation du composant 'Liste'
    Par jpboogie dans le forum Flash
    Réponses: 2
    Dernier message: 11/09/2006, 12h38
  3. Utilisation zone de liste pour requete
    Par vintz dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 31/08/2006, 17h05
  4. Réponses: 7
    Dernier message: 19/06/2006, 09h35
  5. Fuite de mémoire en utilisant le template list
    Par schtroumpf_farceur dans le forum Langage
    Réponses: 9
    Dernier message: 18/07/2005, 20h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo