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 :

probleme des conversion en c++


Sujet :

SL & STL C++

  1. #1
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 38
    Par défaut probleme des conversion en c++
    bonjour,

    mon objectif est de faire la conversion de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    string to char* et de char * to string 
     
    const char* to char ,, 
    double to const char *,
    voila un exemple de fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char * supprimer_blanc(char * chaine)
    { 
      supprimer_droit_blanc(chaine);
      supprimer_gauche_blanc(chaine);  
      return chaine;
    }
    et lors de l'appel il affiche une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
         char* ch;
                  string ligne,chaine;
                  chaine=ligne.substr(25,20);
                  ch=supprimer_blanc(chaine.c_str());
                  tab_ligne[i]=chaine;i++;
    voila l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    138 C:\Documents and Settings\pc\Bureau\Mts System\article.cpp invalid conversion from `const char*' to `char*'
    Je vous remercu infiment a tous ceux qui ont contribuer a ce sujet !

    Vos conseils et astuces sont les bienvenus.

  2. #2
    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
    Par défaut
    c_str() renvoie un const char* (pas modifiable), or ta fonction attend un char* (modifiable).

    Tu ne devrais pas mixer ainsi char* et std::string. Utilise uniquement std::string, je ne vois pas ici l'intérêt de passer par des char*.

  3. #3
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    oula
    ch=supprimer_blanc(chaine.c_str());
    d'aprés ton code devrai modifier la memoire de la string chaine.... C'est pas bien du tout!!!

    fait plustôt une methode comme
    std::string supprimer_blanc(const std::string & a) qui va prendre une string en entré et en donner une autre en retour. avec :
    - const pour signifier que a n'est pas modifiable
    - & pour passer ta string par référence et éviter une recopie

    ou

    bool supprimer_blanc(std::string & a) qui va modifier une string et retourner vrai si tout c'est bien passé

  4. #4
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 38
    Par défaut
    merci

    voila mes fonctions que j'ai modifié mnt :
    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
     
    string supprimer_droit_blanc(string chaine)
    {
      unsigned int i=0;
      unsigned int taille=chaine.size()-1;
      if(taille>0)
        {
          i=taille;
          while(chaine[i]==' ') i--;
          if(i<taille)
           chaine[i]=0;
        } 
        return chaine;
    }
    string supprimer_gauche_blanc(string chaine)
    {
      unsigned int i=0,j=0;
      unsigned int taille=chaine.size()-1;
      if(taille>0)
        {
          while(chaine[i]==' ') i++;
          if(i>0)
            {
              for(j=0;j<=(taille-1);j++)
                 chaine[j]=chaine[(i+j)];
                 chaine[j]=0;
            }
        }
        return chaine;
    }
    string supprimer_blanc(string chaine)
    { 
      supprimer_droit_blanc(chaine);
      supprimer_gauche_blanc(chaine);
      return chaine;  
    }
    et voila l'appel

    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
    vector <Article> Article::lire_article()
    { 
         vector <Article> Vart;
         string chaine;
         string resultat;
         string tab_ligne[2];
         int i=0;
         // CHEMIN ABSOLUE DE FICHIER
         string chemin="C:/Documents and Settings/pc/Bureau/Mts System/article.txt";
         ifstream fichier_article;
         fichier_article.open(chemin.c_str(), ios::in); 
         if(fichier_article)
           {
              string ligne;
              while(getline(fichier_article,ligne))
               {  
                  chaine=ligne.substr(25,20);
                  resultat=supprimer_blanc(chaine);
                  tab_ligne[i]=chaine;i++;
                  if(i==2)
                   { 
                     for(int compt=0;compt<3;compt++)
                     Article * art=new Article();
                     //long int identifiant=(long int)tab_ligne[0];
                     // art.setIdentifiant((long int)tab_ligne[0]);
                     //double prix=atof(tab_ligne[1]);
                     //char * libelle;
                     //libelle=new char[strlen(article.getLibelle())+1];
                     //art.setIdentifiant(identifiant);
                     //art.setPrix(prix);
                     //art.setLibelle(libelle);
                     // ajouter l'objet article art à la fin
                     // Vart.push_back(art);i==0;
                   }
               }
     
           }
        return Vart;
    }
    l'erreur est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     C:\Documents and Settings\pc\Bureau\Mts System\article.cpp In member function `std::vector<Article, std::allocator<Article> > Article::lire_article()': 
    139 C:\Documents and Settings\pc\Bureau\Mts System\article.cpp cannot convert `std::string' to `char*' for argument `1' to `char* supprimer_blanc(char*)'
    merci

  5. #5
    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
    Par défaut
    Apparemment tu as mal recompilé, ton compilo voit toujours le vieux prototype de tes fonctions (avec des char*).

    Et tes fonctions pourraient être simplifiées / améliorées, si tu utilisais les fonctions de std::string du genre substr, find_last_not_of, find_first_not_of, etc.

  6. #6
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 38
    Par défaut
    merci apparement sa marche.
    merci pour l'aide et les conseils.

Discussions similaires

  1. Problemes de conversion des parametres du main
    Par didieu dans le forum C++
    Réponses: 2
    Dernier message: 16/05/2008, 10h37
  2. probleme de conversion des donnees dans l'Edit
    Par tchimou dans le forum Bases de données
    Réponses: 7
    Dernier message: 29/04/2007, 18h38
  3. [JMenu] Probleme Des Evenements du clavier vers les composants des
    Par Nadia_81 dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 05/06/2005, 23h14
  4. [Math][Integer] Problème de conversion
    Par deathwing dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 11/05/2004, 17h01
  5. probleme des utilisateurs
    Par frome dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 24/03/2004, 15h10

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