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 :

CPP class et char


Sujet :

C++

  1. #1
    Membre confirm�
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    D�cembre 2006
    Messages
    105
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 105
    Par d�faut CPP class et char
    bonjour,

    alors j'ai un trou et je n'arrive pas a comprendre ce qui se passe, je m'explique

    je fais une classe toute b�te

    Dans le .h
    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
     
    class Toto
    {
     
        public:
     
        Toto(); 
        void choixTitre(const char *titre);
        ~Toto();
     
     
        private:
     
        char V_titre[30];
    };

    Le but est de recuperer le cons char *titre et de le mettre dans l'attribut char V_titre.
    Etant donn�e que l'on ne peut pas faire une simple assignation je fait donc de la facon suivante :

    dans le .cpp
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //je zap l'initialisation
     
    void Toto::choixTitre(const char *titre)
    {
        int i = 0;
        while(*titre){
            V_titre[i] = *titre;
            titre++; i++;
        }
    }
    Ce code plante et je ne comprend pas pourquoi, mais quand je fais ceci, ca marche :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //je zap l'initialisation
     
    void Toto::choixTitre(const char *titre)
    {
        char toto[30] = {0};
     
        int i = 0;
        while(*titre){
            toto[i] = *titre;
            titre++; i++;
        }
    }
    je trouve ce code identique, la seule difference est que ici, le char est declar� directement dans la methode et non dans la classe.


    J'ai l'impression qu'un truc simple m'echappe! mais pourquoi donc ne puis je pas recuperer const char *titre dans le char V_titre ???

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    D�tails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par d�faut
    Salut,

    Soit tu as oubli� de copier-coller la ligne int i = 0; dans ta premi�re impl�mentation, soit il y a quelque part une autre variable i parasite...
    Et dans tous les cas tu oublies de copier le '\0' terminal dans ta boucle.

    Sinon en vrac :
    . il ne faut pas utiliser de cha�nes C en C++ mais plut�t des std::string
    . tu mets les donn�es en visibilit� protected ce qui semble indiquer que ta classe est pr�vue pour �tre d�riv�e mais ton destructeur n'est pas virtuel
    . en g�n�ral on utilise plut�t ++i que i++ par d�faut

    MAT.

  3. #3
    Membre confirm�
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    D�cembre 2006
    Messages
    105
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 105
    Par d�faut
    oui effectivement dans l'exemple j'ai oubli� de copier le int i = 0;

    pour le '\0' n'est il pas copi� en m�me temps a la fin de la boucle ? (il me semblais)

    pour le ++i, je ne savais pas trop a quel moment il etait utile de l'utiliser ne connaissant pas bien les differences...

    heu oui je me suis plant� avec le "protected", cette classe n'est pas faite pour faire de l'heritage, donc c'est "private" qu'il faut mettre.

    Pour le char c'est parce que j'utilise la library sdl qui a besoin d'un char pour certaines donn�es

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    D�tails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par d�faut
    Citation Envoy� par hakurou Voir le message
    pour le '\0' n'est il pas copi� en m�me temps a la fin de la boucle ?
    Et bien non puisque la boucle s'arr�te d�s que *titre vaut justement 0.

    MAT.

  5. #5
    Membre exp�riment�
    Profil pro
    Dev
    Inscrit en
    D�cembre 2007
    Messages
    191
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Dev

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 191
    Par d�faut
    Pour le char c'est parce que j'utilise la library sdl qui a besoin d'un char pour certaines donn�es
    avec un std::string �a va aussi tr�s bien, il y a la fonction membre de string c_str() pour �a.

  6. #6
    Membre confirm�
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    D�cembre 2006
    Messages
    105
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 105
    Par d�faut
    J'ai chang� pour du choixTitre(const string titre); et appliqu� la methode c_str() et ca marche ! l'attribut en char recupere bien les donn�es du string.

    merci beaucoup !

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    D�tails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par d�faut
    Citation Envoy� par hakurou Voir le message
    J'ai chang� pour du choixTitre(const string titre);
    Il ne reste plus qu'� passer par r�f�rence � la place :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    choixTitre(const string& titre);
    Et c'est parfait.

    MAT.

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

Discussions similaires

  1. VC++: impossible r�partir classe entre .h et .cpp
    Par huguesacker dans le forum C++/CLI
    R�ponses: 2
    Dernier message: 13/11/2006, 02h46
  2. Classe clavier probl�me avec char
    Par benjiprog dans le forum Langage
    R�ponses: 30
    Dernier message: 30/06/2006, 16h04
  3. classe iostream sous dev-cpp
    Par yashiro dans le forum Dev-C++
    R�ponses: 3
    Dernier message: 18/04/2006, 17h34
  4. Distribuer des classes sans le .cpp
    Par Patrick Seuret dans le forum C++Builder
    R�ponses: 4
    Dernier message: 07/04/2006, 09h22
  5. SDL et classe cpp
    Par Tommy Jean dans le forum SDL
    R�ponses: 8
    Dernier message: 19/08/2005, 08h08

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