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 :

C++ attention:deprecated conversion from string constant to 'char*'


Sujet :

C++

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    106
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 106
    Par d�faut C++ attention:deprecated conversion from string constant to 'char*'
    Bonjour a tous,

    je viens vers vous apr�s plusieurs recherche sur le net mais sans suc�es.

    voila j'essaye d�ex�cuter un programme avec code blocks, et je me retrouve avec plusieurs message d'erreur dans mon main du type
    Code cmd : S�lectionner tout - Visualiser dans une fen�tre � part
    attention : deprecated conversion from string constant to 'char*' [-Wwrite-strings]

    les lignes qui me font les erreurs contiennent tous le NEW, exemple ci-dessous :
    Code c++ : S�lectionner tout - Visualiser dans une fen�tre � part
     sRHO = new Block("RO");
    je d�clare bien
    et dans mon fichier Block.cpp je d�clare comme suite:
    Code c++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include "Block.h"
    Block::Block( char *name, Bank *b) : BlockPP(name, b)
    {   
        B = 3;
        Text = ID;
        strcpy(address.name,name);
    }

    auriez vous une id�e sur ce qui coince ?
    est ce que cela est due au linkage et que j'ai mal configur� le code blocks,
    ou c'est une erreur de syntaxe ...

    merci de votre aide

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Inscrit en
    D�cembre 2011
    Messages
    9 026
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 9 026
    Par d�faut
    Bonjour,

    Toutes les cha�nes "aeddde" sont stock�es dans le data segment, on ne doit donc pas pouvoir les modifier, il faut alors faire const char * c = "aeddde" ou void foo(const char * c);.

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    106
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 106
    Par d�faut
    Merci Neckara pour ta r�ponse,

    je n'ai pas bien compris ta r�ponse, que ce que tu veux dire avec "aeddde", et la ligne
    Code c++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    const char * c = "aeddde" 
     void foo(const char * c)
    je doit la mettre a quelle niveau.

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Inscrit en
    D�cembre 2011
    Messages
    9 026
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 9 026
    Par d�faut
    Citation Envoy� par bforzeus Voir le message
    Merci Neckara pour ta r�ponse,

    je n'ai pas bien compris ta r�ponse, que ce que tu veux dire avec "aeddde", et la ligne
    Code c++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    const char * c = "aeddde" 
     void foo(const char * c)
    je doit la mettre a quelle niveau.
    A ta ligne sRHO = new Block("RO");, tu lui donne une cha�ne constante, il faut donc que le constructeur de Block prenne en param�tre un const char * ou un const std::string &

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    106
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 106
    Par d�faut
    j'ai modifier le constructeur de la fa�on suivante :
    Code c++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    #include "Block.h"
    Block::Block( const char *name, Bank *b) : BlockPP(name, b)
    {   
        B = 3;
        Text = ID;
        strcpy(address.name,name);
    }

    mais j'ai toujours les m�me erreurs.
    Code cmd : S�lectionner tout - Visualiser dans une fen�tre � part
    attention : deprecated conversion from string constant to 'char*' [-Wwrite-strings]
    saurai tu pour quoi, n'y a til pas d'autre moins de contourn� le probleme

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Inscrit en
    D�cembre 2011
    Messages
    9 026
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 9 026
    Par d�faut
    BlockPP(name, b) => as-tu pens� � modifier aussi le constructeur de BlockPP ?

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    106
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 106
    Par d�faut
    Oui, j'ai modifier le blockpp.cpp comme suite :
    Code c++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    BlockPP::BlockPP(const char *n, bank *b) 
    {  b = b;
        d = d;
    }
    et j'ai toujours la m�me erreur

  8. #8
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    106
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 106
    Par d�faut
    tu sais pas s'il ya un autre moyen pour contourn� cette probl�matique des
    Code cmd : S�lectionner tout - Visualiser dans une fen�tre � part
    attention : deprecated conversion from string constant to 'char*' [-Wwrite-strings]

  9. #9
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    Attention, l'affectation n'est pas l'initialisation.
    Lors d'un construction d'une variable d'un type donn�, il y a plusieurs phases:
    • allocation de la m�moire: par le compilateur ou un new
    • initialisation de la m�moire
    • ex�cution du constructeur a proprement parler


    L'allocation n'est pas du ressort de la classe, mais les autres �tapes si.
    Pour ce faire, on utilise les constructeurs:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    class C {
    private:
        int n;
    public:
        C(int value) : n(value) { std::cout <<n<<std::endl;}
    };
    La partie entre les accolades est le corps du constructeur, appel� une fois la variable initialis�e.
    La partie juste apr�s le ':', bien qu'optionnelle, est compos�e d'appels aux constructeurs des membres et classes parentes (ou des (grands-)parents virtuels).
    Chaque membre non explicitement construit est construit via un constructeur par d�faut.

  10. #10
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    106
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 106
    Par d�faut
    j'ai bien d�clar� mon constructeur, sauf que l'appelle a ce dernier avec une chaine de caract�re constante qui pose probleme, et je comprend vraiment pas pourquoi

  11. #11
    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
    De quel type est ton address.nameJ'ai l'impression que tu essaies de faire quelque chose de pas joli joli avec cette ligne :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    strcpy(address.name,name);
    l� ou un simple address.name = name, si tant est que address.name est bien un std::string
    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).

  12. #12
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    106
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 106
    Par d�faut
    elle est bien de type std::string.
    je pense pas que mon probleme viens de la,
    parce que j'ai plusieurs erreur de ce type et dans les autre classe je fais des appelle simple.
    le seul point en commun c'est que les fonction qui coince c'est les constructeur avec un char, et moi je fais appelle a eux avec des chaine de caract�re dans mon main.
    je ne voix vraiment pas ce qui d�range de faire appelle avec une chaine de caract�re constante

  13. #13
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    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 153
    Billets dans le blog
    4
    Par d�faut
    Bonsoir,

    le probl�me est stipul� plus haut : les cha�nes "en dur" dans le code sont des const char* d�finis particuli�rement dans l'ex�cutable, le data_segment.
    Si une m�thode demande un char* et non un const char*, rien n'assure qu'elle ne modifie pas ce param�tre. Puisqu'il n'est pas constant.
    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.

  14. #14
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    106
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 106
    Par d�faut
    merci a tous,

    c��tait bien �a le probleme, j'ai oublier de mettre le const char* dans le fichier .h, maintenant c'est nikel.
    SOl:
    il faut remplacer char* par const char* dans le .cpp et .h

    ca fais plaisir de voir qu'il y a moins d'erreurs et de warning dans son programme

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

Discussions similaires

  1. R�ponses: 3
    Dernier message: 04/05/2010, 08h58
  2. R�ponses: 2
    Dernier message: 08/12/2009, 12h57
  3. R�ponses: 2
    Dernier message: 18/02/2009, 13h30
  4. Conversion error from string "15-AUG-2008"
    Par freud dans le forum SQL
    R�ponses: 2
    Dernier message: 17/08/2008, 19h24
  5. error: invalid conversion from `const wxChar*' to `CHAR*'
    Par barbarello dans le forum wxWidgets
    R�ponses: 16
    Dernier message: 31/01/2006, 11h28

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