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 :

Code simple ne veut pas fonctionner


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 32
    Par défaut Code simple ne veut pas fonctionner
    Salut je suis nouveau, et je ne comprend pas pourquoi ce bout de code plante a l'édition des liens

    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
    class maClasse
    {
    		public:
     
    			void modifierMembre(long nouvelleValeur)
    			{
    				maClasse::m_maVariable = nouvelleValeur;
    			}
     
    			static long m_maVariable;
     
    };
     
    int main(int argc, char *argv[])
    {
     
    	maClasse monObjet;
     
    	monObjet.modifierMembre(10);
     
    	return 0;
    }

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Cela "plante" à l'édition de lien parceque tu déclares une variable membre statique dans ta classe mais que cette variable n'est pas définie.

    Il te manque quelque chose dans ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class maClasse
    {
    ...
    };
     
    long maClasse::m_maVariable;
    ou encore
    long maClasse::m_maVariable = 0;
     
    int main(int argc, char *argv[])
    {
    ...
    }
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 32
    Par défaut
    ok merci mais long maClasse::m_maVariable; je le met dans l'espace global alors ?

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Oui, comme je t'ai montré (en court) dans mon exemple
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 444
    Par défaut
    Oui, car ça l'est.

    Une variable locale statique est implicitement une variable globale puisque sa valeur doit être conservée même en sortant du bloc, puis retrouvée lorsque l'on y rentre à nouveau. Elle ne peut donc être conservée dans la pile et doit donc être globale.

    Sur le même modèle, une variable d'un objet dont la valeur doit être conservée après la mort de cet objet doit donc être stockée en dehors, dans le même espace des variables globales. Comme il n'y a pas moyen de différencer un objet d'un autre lorsque qu'ils sont détruits et recréés, les variables statiques sont donc également en instance unique et communes à tous les objets de la classe (ce qui s'avère souvent très pratique).

    La différence, c'est que lorsque que tu définis une variable statique dans le corps d'une fonction, tu l'instancies effectivement (dans le code). Au sein de ta classe, tu ne fais que la déclarer, puisqu'elle ne sera instanciée qu'à la création des objets. Il te faut donc définir explicitement l'endroit où cette variable doit se trouver.

    C'est même nécessaire, car tu te retrouves alors dans le même cas de figure qu'avec extern sur des globales en C. Différents fichiers sources font appel à tes classes, mais un seul doit être en charge de gérer cette variable.

Discussions similaires

  1. Comprendre un code qui ne veut pas fonctionner
    Par zpico dans le forum Débuter avec Java
    Réponses: 12
    Dernier message: 29/12/2011, 12h59
  2. Une formule qui ne veut pas fonctionner
    Par Maxence45 dans le forum Excel
    Réponses: 4
    Dernier message: 09/11/2007, 01h17
  3. Code::Blocks ne veut pas build un projet qui a été fermé
    Par Shugo78 dans le forum Code::Blocks
    Réponses: 3
    Dernier message: 09/05/2007, 08h47
  4. Le multisampling ne veut pas fonctionner
    Par @Dave dans le forum GLUT
    Réponses: 1
    Dernier message: 13/12/2006, 11h47
  5. docmd.runSQL ne veut pas fonctionner
    Par ender06 dans le forum Access
    Réponses: 4
    Dernier message: 06/09/2006, 13h18

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