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 :

string et STL


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 10
    Par défaut string et STL
    Bonjour,

    je n'arrive pas à compiler (sous Visual Studio 2010) lorsque j'utilise une map avec une string. J'ai écris un bout de code qui vous montre le problème si vous essayez de compiler :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include "stdafx.h"
    #include <iostream>
    #include <map>
     
    using namespace std;
     
    class Personne
    {
    public:
    	Personne(string nom) {cout << _nom << endl; }
    	void sePresenter()
    	{
    		cout << "Je suis : " << _nom.c_str() << endl;
    	}
     
    private:
    	string _nom;
    };
     
     
    int _tmain(int argc, _TCHAR* argv[])
    {
    	Personne* p = new Personne("toto"); 
     
    	map<string, Personne*> groupe;
    	pair<string, Personne*> pp("toto", p);
     
    	groupe1.insert ( pp );
     
    	system("PAUSE");
     
    	return 0;
    }
    A priori ce n'est pas très compliqué, mais la ligne insert ne compile pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error C2784: 'bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)'*: impossible de déduire l'argument modèle pour 'const std::_Tree<_Traits> &' à partir de 'const std::string'
    Pourtant, ma syntaxe me semble correcte ?

    Merci par avance aux membres éclairés pour leur avis !

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Euh ... où est déclaré groupe1 ? je vois bien groupe...
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 10
    Par défaut
    Bonjour,

    oui, bien sûr, c'est groupe et non groupe1 !

    C'est une erreur de recopie, mais l'erreur est bien au niveau du insert, lors de la compilation : voir le message d'erreur que je reçois comme mentionné dans mon post.

    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
    25
    26
    27
    28
    29
    30
    31
    #include "stdafx.h"
    #include <iostream>
    #include <map>
     
    using namespace std;
     
    class Personne
    {
    public:
    Personne(string nom) {cout << _nom << endl; }
    void sePresenter()
    {
    cout << "Je suis : " << _nom.c_str() << endl;
    }
     
    private:
    string _nom;
    };
     
     
    int _tmain(int argc, _TCHAR* argv[])
    {
    Personne* p = new Personne("toto");
     
    map<string, Personne*> groupe;
    pair<string, Personne*> pp("toto", p);
     
    groupe.insert ( pp );
     
    return 0;
    }
    A priori ce n'est pas très compliqué, mais la ligne insert ne compile pas :

    error C2784: 'bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)'*: impossible de déduire l'argument modèle pour 'const std::_Tree<_Traits> &' à partir de 'const std::string'
    Merci

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Je n'ai pas lu en détails, mais je crois que j'ai déjà eu ce genre d'erreurs quand j'ai oublié le #include <string>
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    J'ai pris ton bout de code et l'ai compilé sous VS2010, le seul problème que j'ai rencontré est qu'il manque #include <string>, sinon ça compile très bien. (il manque tout de même l'affectation de nom à _nom dans ton constructeur de Personne)
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 10
    Par défaut
    La honte est sur moi... j'ai oublié le include.

    Merci (à tous les deux) !

  7. #7
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 25
    Par défaut
    Est-ce que je suis le seul à trouver irritant de voir des extraits de code parfaitement portables utiliser ce genre d'éléments?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include "stdafx.h"
     
    // ou
     
    int _tmain(int argc, _TCHAR* argv[])
    Je veux bien croire qu'elles apparaissent dans un programme utilisant certaines des extensions Microsoft. Cependant, un grande quantité de programmes n'utilisent que du C++ standard mais nécessitent tout de même d'être modifiés pour pouvoir être testés sur d'autre compilateurs que Visual Studio.

  8. #8
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    #include "stdafx.h" est tout à fait portable, precompiled header, tout ça (d'ailleurs on l'appelle comme on veut hein)...
    Par contre, ça ne me gène aucunement de voir du code écrit pour Visual Studio.
    Je ne comprends pas cette remarque
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  9. #9
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 25
    Par défaut
    Citation Envoyé par dragonjoker59 Voir le message
    #include "stdafx.h" est tout à fait portable, precompiled header, tout ça (d'ailleurs on l'appelle comme on veut hein)...
    Autant pour moi, ça m'était sorti de la tête...

  10. #10
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Je ne suis que moyennement d'accord sur l'aspect portabilité. Certes, le code compile, mais du code prévu pour être compilé avec des headers précompilés à la stdafx est généralement du code qui compilera très lentement sur toute autre plateforme, puisque l'on aura eu tendance à mettre plein de choses dans ce header, alors que la règle classique pour une compilation rapide est de minimiser les dépendances de header.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  11. #11
    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,

    Par contre, moi, c'est int _tmain(int argc, _TCHAR* argv[]) qui me gène beaucoup plus, à caus de l'utilisation de symbole spécifiques à l'implémentation (_tmain et _TCHAR)
    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

  12. #12
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Je suis d 'accord avec toi, Loïc
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

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

Discussions similaires

  1. [stl] questions sur la classe string
    Par r0d dans le forum SL & STL
    Réponses: 3
    Dernier message: 23/02/2007, 00h31
  2. [STL]string, fuites de mémoires
    Par anasama dans le forum SL & STL
    Réponses: 8
    Dernier message: 18/05/2006, 08h58
  3. [STL]std::map<std::string, structure> Parcour...
    Par Zenol dans le forum SL & STL
    Réponses: 5
    Dernier message: 11/02/2006, 13h46
  4. Réponses: 7
    Dernier message: 25/11/2005, 17h11
  5. [STL] vector<string> et appel de fonctions.
    Par guejo dans le forum MFC
    Réponses: 4
    Dernier message: 08/10/2004, 17h36

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