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 :

Impossibilité de modifier la valeur d'un membre via une méthode de classe


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 33
    Points : 30
    Points
    30
    Par défaut Impossibilité de modifier la valeur d'un membre via une méthode de classe
    Bonjour

    Je débute en C++ j'ai un problème : J'ai un membre m_playing, de type byte, déclaré privé dans une classe dont je ne parviens pas à modifier sa valeur via les méthodes de la classe. Il me sort toujours la valeur 192 alors que je veux la mettre à 1 ou à 0.

    Pourquoi ? Où est mon erreur ?

    Voici mon code (ps : Je travaille sur un arduino. Serial.println() me sert à afficher des valeurs sur mon écran via une liaison série)

    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
     
    /**
     * ----------------------------------------------------
     * Ficher d'en tête de la classe
     * ----------------------------------------------------
     */
     
    #ifndef RAILSDMP3_H
    #define RAILSDMP3_H
     
    #include <avr/pgmspace.h>
    #include <Arduino.h>
    #include <SD.h>
    #include <railVs10xx.h>
     
    class railSdMp3
    {
    	private : 
     
    		byte	m_playing;         // Déclaration du membre.
    		char*	p_trackName;
    		byte	m_readLen;
     
    	public :
     
    		railSdMp3();
    		void 	begin();
                    ....
     
    };
    #endif RAILSDMP3_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
    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
     
    /**
     * ----------------------------------------------------
     * Ficher CPP de la classe
     * ----------------------------------------------------
     */
    #include <railSdMp3.h>
     
    #define SD_CS 	  	        10	// SD Chip Select pin id
    #define SD_READ_BUF_LEN  	32	// taille du buffer SD > MP3
     
    Sd2Card    card;
    SdVolume  volume;
    SdFile      	root;
    SdFile      	track;
     
    static byte readBuf[SD_READ_BUF_LEN];
     
    /**
     * Constructeur
     */
    railSdMp3::railSdMp3()
    	: m_playing(0),             // j'initialise le membre avec la valeur 0
              m_readLen(0)
    {}
     
     
    /**
     * Init SD and VS1053
     */
    void railSdMp3::begin()
    {
     
    	Serial.print("Affiche m_playing 1ere fois:");
    	Serial.println(m_playing);                               // Il l'affiche 192 et pas 0 !!
            m_playing = 1;
    	Serial.print("Affiche m_playing 2nd fois:");
    	Serial.println(m_playing);                               // Il affiche 192 encore et pas 1 !!
            // .... la suite ici ...
    }
     
    ....
    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
     
    /**
     * Programme ...
     */
    #include <Arduino.h>
    #include <SD.h>
    #include <railVs10xx.h>
    #include <railSdMp3.h>
     
    railSdMp3* swi01;
     
    void setup()
    {  
     
      Serial.begin(9600);
      delay(2000);
     
      swi01->begin();         // Affiche la valeur du membre m_playing
      ....
     
    }
     
    void loop()
    {
       ...
    }

    Merci pour votre aide.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 142
    Points : 109
    Points
    109
    Par défaut
    ton pointeur swi01 ne pointe vers rien de créé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    railSdMp3* swi01 = new railSdMp3();
    Il faut penser à le detruire quand tu n'en auras plus besoin via :


  3. #3
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    Tu peux aussi te passer d'un pointeur et faire simplement ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static railSdMp3 swi01;
    Je ne connais pas Arduino, mais si tu peux éviter les variables globales alors évite les. Sinon note le mot clé "static", il permet de déclarer une variable globale qui ne sera accessible que dans le module courant (que dans le .cpp courant).

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 28/08/2008, 18h15
  2. Réponses: 2
    Dernier message: 29/06/2008, 19h16
  3. Modifier les valeurs de certains champs d'une table
    Par Xorbane dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 22/10/2007, 22h10
  4. Réponses: 3
    Dernier message: 02/01/2007, 13h53
  5. Réponses: 4
    Dernier message: 07/08/2006, 16h19

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