Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur (de ma part ?) dans un tutorial

et question sur la recherche de topic

Sujet résolu
    17 août 2007 à 2:22:37

    Bonjour.
    En testant un code dans le tutorial de C++, mon compilateur m'a renvoyé un
    " error : invalid conversion from 'const char*' to 'char*' "
    à la ligne 10 pour ce code :
    1. #include <iostream>
    2. #include <string> // Obligatoire pour pouvoir utiliser les objets string
    3. using namespace std;
    4. int main()
    5. {
    6. string chaine = "Bonjour";
    7. char* chaineC = NULL;
    8. chaineC = chaine.c_str(); // On récupère le tableau de char dans chaineC
    9. cout << "La chaine contient : " << chaineC << endl; // On l'affiche pour vérifier que ça fonctionne
    10. return 0;
    11. }

    (qui se trouve juste avant le QCM "la magie de la POO " (chap 5), partie IV)
    Je voudrais savoir pourquoi (et si cela est arrivé à d'autres personnes).

    Je voudrais savoir aussi si il y a une fonction recherche dans le forum pour eviter les topics doublons (je n'en ai pas vu mais j'ai peut-être mal cherché :p )
    Aussi, si on a un probleme mais qu'on ne sait pas si on peut le resoudre en C ou C++, j'imagine qu'on poste dans le chapitre C++ (qui englobe le C si j'ai bien compris :p )?
    Merci d'avance pour vos lumières ;)
    Bonne nuit
    • Partager sur Facebook
    • Partager sur Twitter
      17 août 2007 à 2:29:17

      Tout simplement parce que les types sont incompatibles.

      Ta variable chaineC doit être de type const char* également.

      Une conversion implicite const char*->char* est impossible.
      • Partager sur Facebook
      • Partager sur Twitter
        17 août 2007 à 3:01:30

        Oui mais la variable (pointeur) chaineC n'est pas déclarée comme constante ! C'est ca que je trouve bizarre ! (et puis un pointeur constant, on n'en a pas parlé, mais j'ai testé ca passe au compilateur).
        • Partager sur Facebook
        • Partager sur Twitter
          17 août 2007 à 8:38:40

          Oui mais la variable (pointeur) chaineC n'est pas déclarée comme constante !

          C'est justement ça l'erreur.
          • Partager sur Facebook
          • Partager sur Twitter
          Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
            17 août 2007 à 21:01:52

            c_str() retourne un "const char*" il ne permettera pas de copier son adresse dans un pointeur ne permettant pas de le protéger contre les modifications...

            Par contre ceci devrait fonctionner
            1. const char* chaineC = NULL;
            2. chaineC = chaine.c_str();


            tu devrais te renseigner sur le fonctionnement des const avec les pointeurs.
            • Partager sur Facebook
            • Partager sur Twitter
              21 août 2007 à 2:03:59

              Ton code ne marchera pas, normalement.
              Tu modifies chaineC après lui avoir affectée une valeur.
              • Partager sur Facebook
              • Partager sur Twitter
                21 août 2007 à 11:42:02

                La fonction membre c_str() renvoit effectivement un const char*, autrement dit un pointeur sur une chaine constante (et pas un pointeur constant sur une chaine : char *const)
                Or tu ne peut pas convertir un const char* en char* sinon si tu déclares une variable const (ex: const i=13) et bien tu n'aurais qu'a faire pointer un int* dessus pour la modifier ! (le bon type serait const int*, et meme const int* const si tu voulais en plus un pointeur constant)
                D'autre part, une constante doit être définie au moment de sa déclaration, donc tu ne peut pas écrire:

                const char* i=0;
                i=&blabla;
                • Partager sur Facebook
                • Partager sur Twitter
                  21 août 2007 à 16:17:19

                  Ok merci :) (surtout BCédric ;) j'ai du lire 2 fois avant de comprendre mais c'est interessant).
                  Le code de MatteX marche bien. (Je vais MP M@teo21 pour lui signaler l'erreur...)

                  Et j'ai trouvé aussi cette solution :
                  1. #include <iostream>
                  2. #include <string> // Obligatoire pour pouvoir utiliser les objets string
                  3. using namespace std;
                  4. int main()
                  5. {
                  6. string chaine = "Bonjour";
                  7. const char* chaineC = chaine.c_str();
                  8. //chaineC = chaine.c_str(); // On récupère le tableau de char dans chaineC
                  9. cout << "La chaine contient : " << chaineC << endl; // On l'affiche pour vérifier que ça fonctionne
                  10. return 0;
                  11. }



                  Sinon, pour mes 2 questions un peu HS ? :

                  Je voudrais savoir aussi si il y a une fonction recherche dans le forum pour eviter les topics doublons (je n'en ai pas vu mais j'ai peut-être mal cherché :p )
                  Aussi, si on a un probleme mais qu'on ne sait pas si on peut le resoudre en C ou C++, j'imagine qu'on poste dans le chapitre C++ (qui englobe le C si j'ai bien compris :p )?
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    21 août 2007 à 16:38:36

                    Il y avait une fonction recherche, mais elle a momentanément été désactivée, comme indiqué à gauche :-° .

                    Ensuite, C et C++ sont 2 langages différents, donc quand tu programmes, tu choisis si tu programmes en C ou en C++? En suivant cette logique, tu ne devrais pas avoir de problèmes pour choisir le bon forum.
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Erreur (de ma part ?) dans un tutorial

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown