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 :

conversion const truc to truc


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut conversion const truc to truc
    Bonjour à tous,

    Ma question est surement bete mais je voudrait savoir pourquoi on ne peut pas convertire une constante en une variable normale.

    Et comment faire si une fonction nous renvoi une constante et qu'on veut la mettre dans une variable.

    Merci a tous

    dark calculator

  2. #2
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Je passais simplement par là...
    Et.... mettre dans une variable la valeur de la constante ne ferait pas l'affaire ?...

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut
    c'est se que je veut faire
    d'ailleur j'ai trouvé dans la FAQ l'operateur de casting :const_cast
    sa passe au compilateur mais ca bogue apres
    (je pense su'il n'y a aucun rapport avec les constantes)

    mais je ne comprend tjours pas pourquoi ceci ne marche pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    static c8* a;
     
    int test(c8* filename)
    {
    	a = filename;
    	return 1;
    }
     
    int main()
    {
    	stringc buf;
    	test(buf.c_str());
    }

  4. #4
    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
    Ca c'est quelque chose à ne surtout pas faire. Si la fonction c_str() renvoie une chaîne constante, c'est bien pour qu'on n'essaye pas d'y accéder en écriture.

    Il faut donc en faire une copie si tu veux en faire quelque chose après.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Tu peux nous mettre un peu de ton code qu'on y voit plus clair s'il te plait?

    Merci

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut
    Donc je pense qu'il vaut mieu eviter d'utiliser le casting c'est peut etre de la que venait mes autres probleme.
    Mais alors comment faire une copie de la variable sans que se soit une constante ?

    Sinon voici mon code :

    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
     
    class Corp
    {
    public:
    	Corp(double taille = 100,c8 *modelepath = "modele/test.x",c8 *texturepath = "texture/test.bmp");
    	Corp(Corp &corp);
    	~Corp();
     
    	int setTaille(double taille);
     
    	double getTaille();
     
    	c8 *getModelePath();
    	c8 *getTexturePath();
     
    	int setModelePath (c8 *modelepath);
    	int setTexturePath(c8 *texturepath);
     
    protected:
    	double Taille;
     
    	c8 *ModelePath;
    	c8 *TexturePath;
    };
     
     
     
     
     
    	Corp *cen = new Corp();
     
    	while(xml && xml->read())
    	{
    		if (xml->getNodeType()==EXN_ELEMENT)
    		{
    			if (core::stringw("Centre") == xml->getNodeName())
    			{
     
    				valucen = xml->getAttributeValue(L"Taille");
    				cen->setTaille((f32)atof(valucen.c_str()));
     
    				pathcen[0] = xml->getAttributeValue(L"ModelePath");
    				cen->setModelePath( const_cast<c8*>( pathcen[0].c_str() ) );
     
    				pathcen[1] = xml->getAttributeValue(L"TexturePath");
    				cen->setTexturePath( const_cast<c8*>( pathcen[1].c_str() ) );
     
    				Sys = new Systeme(*cen);
     
    			}
    		}
    	}
    le programme que je fait utilise irrlicht comme moteur 3d
    et cet partit est consacre à la lecture d'un fichier xml.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Oui je vois,

    En fait le problème est que pathcen[1].c_str() te renvoi un pointeur vers un tableau de caractères en étant constant. Donc admettons lors de l'excécution ça laisse passer, cette chaine de caractère pourra être modifiée via le pointeur auquel tu l'a attribué qui lui n'est pas constant...

    Tu ne dois pas faire (pointeur vers une chaine non constante = pointeur vers une chaine constante) mais plutôt (valeur de mon pointeur non constant = valeur de mon pointeur constant)

    Utilise strcpy_s pour faire la recopie des valeurs.

    A bientôt

    Aurélien

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut
    Merci a toi aurelien je n'ait pas encore essayer mais je pense que ca va marcher

    @ +

    encore merci

    dark calculator

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Si tu as besoin, n'hésite pas ça sera avec plaisir

    Aurélien

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut
    Merci beaucoup sa marche nikel
    sinon je voulais savoir si il faut que je modifie aussi pour (f32)atof( valucen.c_str() ) ou si comme ca sa va

    merci

    dark calculator

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    non, là c'est bon, tu modifie une valeur avec une autre valeur, y'a pas de soucis

    Jète un petit coup d'oeil à la faq C++, car si l'histoire des pointeur/valeurs est un peu confuse, ça va être difficile d'avancer


    A bientôt

    Aurélien

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

Discussions similaires

  1. Problème de conversion const
    Par Gaspoute dans le forum C++
    Réponses: 17
    Dernier message: 10/01/2012, 21h26
  2. Réponses: 7
    Dernier message: 06/04/2011, 16h54
  3. conversion const std::string et const char * ?
    Par panthere noire dans le forum C++
    Réponses: 7
    Dernier message: 28/02/2011, 15h51
  4. Conversion const char* vers std::string
    Par scheme dans le forum C++
    Réponses: 4
    Dernier message: 21/09/2010, 11h02
  5. Problème conversion const char *
    Par autoz dans le forum Débuter
    Réponses: 5
    Dernier message: 15/10/2009, 21h19

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