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

SL & STL C++ Discussion :

Convertir un std::string en double.


Sujet :

SL & STL C++

  1. #1
    Membre �clair� Avatar de vdumont
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2006
    Messages
    510
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 510
    Par d�faut Convertir un std::string en double.
    Bonjour, comment convertir un std::string en double? J'ai essayer avec un static_cast sans succ�s...


  2. #2
    Membre �prouv�
    Avatar de doudoustephane
    Homme Profil pro
    G�rant
    Inscrit en
    Ao�t 2005
    Messages
    1 129
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activit� : G�rant

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 1 129

  3. #3
    Membre �clair� Avatar de vdumont
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2006
    Messages
    510
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 510
    Par d�faut
    Ca fonctionne pas mon truc


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    template <class T>
    std::string Util::ToStr(const T & value) 
    {
        std::ostringstream oss;
        oss << value;
        return oss.str(); 
    }
    En faisant:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     double offset = Util::ToStr(dialog->GetOffset().mb_str()); // retourne un const char*

    cannot convert `std::basic_string<char, std::char_traits<char>, std::allocator<char> >' to `double' in initialization

  4. #4
    Membre �prouv�
    Avatar de doudoustephane
    Homme Profil pro
    G�rant
    Inscrit en
    Ao�t 2005
    Messages
    1 129
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activit� : G�rant

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 1 129
    Par d�faut
    essaye de faire :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    template <class T>
    bool Util::ToStr(std::string & str, const T & value) 
    {
        std::istringstream iss(str);
        return iss >> value != 0; 
    }
    En faisant:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     double offset = Util::ToStr(dialog->GetOffset().mb_str()); // retourne un const char*
    toi, tu faisait un flux de sortie et non un flux d'entree!!!

  5. #5
    Membre �clair� Avatar de vdumont
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2006
    Messages
    510
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 510
    Par d�faut
    Je fais maintenant


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    double offset;
    Util::FromStrToAny(dialog->GetOffset().mb_str(), offset);
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     template <class T>
     static bool FromStrToAny(const std::string&, T&)
     
     
    template<class T>
    bool FromStrToAny(const std::string & str, T & out )
    {
        // créer un flux à partir de la chaîne donnée
        std::istringstream iss( str );
     
        // tenter la conversion vers Dest
        return iss >> out != 0;
    }

    Et au linkage ca plante en me disant:

    [Linker error] undefined reference to `bool Util::FromStrToAny<double>(std::string const&, double&)'

  6. #6
    Membre �prouv�
    Avatar de doudoustephane
    Homme Profil pro
    G�rant
    Inscrit en
    Ao�t 2005
    Messages
    1 129
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activit� : G�rant

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 1 129
    Par d�faut
    Citation Envoy� par vdumont
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
     template <class T>
     static bool FromStrToAny(const std::string&, T&)
    est-ce normal que le ";" de ta declaration n'y soit pas???

  7. #7
    Membre �clair� Avatar de vdumont
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2006
    Messages
    510
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 510
    Par d�faut
    Erreur de copier/coller d�sol�. Il y est.

  8. #8
    Membre �prouv�
    Avatar de doudoustephane
    Homme Profil pro
    G�rant
    Inscrit en
    Ao�t 2005
    Messages
    1 129
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activit� : G�rant

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 1 129
    Par d�faut
    ca plante sur l'utilisation ou la partie declaration?implemantation???

  9. #9
    Membre �clair� Avatar de vdumont
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2006
    Messages
    510
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 510
    Par d�faut
    Ca plante sur le:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    Util::FromStrToAny(dialog->GetOffset().mb_str(), offset);

  10. #10
    Membre �prouv�
    Avatar de doudoustephane
    Homme Profil pro
    G�rant
    Inscrit en
    Ao�t 2005
    Messages
    1 129
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activit� : G�rant

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 1 129
    Par d�faut
    je ne me souviens plus trop donc, es-tu sur que la reference inclus dans la fonction ne gene pas l'appel ou tu passes une valeur?? il ne faudrait pas un pointeur par hasard ???

  11. #11
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651

  12. #12
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    2 155
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 155
    Par d�faut
    oui, Laurent a raison...
    Mais tout de m�me, c'est �nervant de devoir mettre tout dans le m�me fichier pour que le linker fasse son boulot...
    C'est vraiment le d�fault des template...

  13. #13
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    Ce n'est pas le linker qui a un probl�me, c'est le compilateur. Comment peut-il g�n�rer le code s'il ne sait pas qu'il doit le g�n�rer dans une autre unit� de compilation ?

  14. #14
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    2 155
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 155
    Par d�faut
    oui, au temps pour moi...

  15. #15
    Membre �clair� Avatar de vdumont
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2006
    Messages
    510
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 510
    Par d�faut
    Je comprend pas trop l�... mes fonctions sont d�j� tous dans un seul fichier .h donc je serais pas supposer avoir le probl�me ?!





    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    /* Auteur: Vincent Dumont
     * Printemps 2006
    */
     
    #ifndef util_h
    #define util_h
    #include <string>
    #include <sstream>
    #include <exception>
    /**************************
     *CLASSE ConversionFailure*
     *************************/ 
    class ConversionFailure: public std::exception
    {   
       public: 
         virtual const char* what() const throw() { return "Erreur: echec dans la conversion."; }    
    }; 
     
    /*************************
     *      CLASSE Util      *
     *************************/ 
    class Util 
    {
      public:
      Util();
      ~Util();
     
      template <class T>
      static std::string ToStr(const T &);                     // Convertir en string    
     
      template <class T>               
      static int ToInt(const T &) throw(ConversionFailure);    // Convertir en entier, peut lancer des exceptions en cas d'échec du >>
     
      template <class T>
      static bool FromStrToAny(const std::string&, T&)  throw(ConversionFailure); // Recoit un string et le converti en un type donné
    }; 
     
    /* *************************** * 
     *   IMPLEMENTATION DE Util    *
     * *************************** */
    template <class T>
    std::string Util::ToStr(const T & value) 
    {
        std::ostringstream oss;
        oss << value;
        return oss.str(); 
    }
     
    template <class T>
    int Util::ToInt(const T & value) throw(ConversionFailure)
    {
        std::istringstream iss(value);
        int integer;
        if (!(iss >> integer)) throw ConversionFailure();
     
        return integer;
    }
     
    template<class T>
    bool FromStrToAny(const std::string & str, T & out )
    {
        std::istringstream iss( str );
     
        // tenter output
        return iss >> out != 0;
    }
    #endif


    Je suis capable d'utiliser mes autres fonctions, ya seulement FromStrToAny qui plante au link...

  16. #16
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    Dans l'impl�mentation, il n'y a pas les throw.
    Une indication : le fait d'indiquer que les fonctions peuvent renvoyer seulement un throw de type ConversionFailure fait que le compilateur ajoute un bloc try catch autours de ta fonction, et si elle renvoie un jour autre chose, c'est directement le programme qui se termine.
    En gros, les indications de throw sont � �viter.

  17. #17
    Membre �clair� Avatar de vdumont
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2006
    Messages
    510
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 510
    Par d�faut
    Dah en effet c'�tais le throw qui pausait probl�me. �tant donn� qu'il y avait le throw dans la d�claration mais pas dans l'impl�mentation.



+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Convertir une std::string de utf8 vers cp850
    Par dj.motte dans le forum SL & STL
    R�ponses: 7
    Dernier message: 30/10/2008, 22h15
  2. [FAQ]Comment convertir une std::string en AnsiString ?
    Par Invit� dans le forum C++Builder
    R�ponses: 2
    Dernier message: 26/11/2006, 18h08
  3. Comment convertir une variable string en double?
    Par quentinoux dans le forum C++
    R�ponses: 12
    Dernier message: 31/07/2006, 10h46
  4. convertir std::string en float
    Par radicalrider dans le forum SL & STL
    R�ponses: 20
    Dernier message: 03/07/2006, 18h50
  5. convertir un char * en std::string
    Par benahpets dans le forum SL & STL
    R�ponses: 12
    Dernier message: 01/05/2006, 17h15

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