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

Langage C++ Discussion :

problème avec les variables globales


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Février 2011
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 188
    Par défaut problème avec les variables globales
    Bonjour,

    svp,aidez moi.

    J'ai les fichiers C1.h, C2.h , C3.h , C1.cpp, C2.cpp , C3.cpp et main.cpp. Je veux déclarer une variable globale varGlo de type int que je veux l'utiliser dans C1, C2 et C3.
    Ou je dois la déclarer?

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    La première chose à te dire, c'est LES VARIABLES GLOBALES, C'EST MAL.

    Autrement dit, si tu peux t'en passer, passes t'en .

    Pourrais tu déjà nous expliquer pourquoi tu crois avoir besoin d'une variable globale, histoire que nous puissions t'expliquer comment t'en passer

    S'il s'avère qu'il est effectivement impossible de t'en passer, je me ferai un plaisir de répondre à ta question, car la réponse est particulièrement triviale
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre très actif
    Inscrit en
    Février 2011
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 188
    Par défaut
    En fait, cette variable globale va être appeler dans C1.cpp, C2.cpp et C3.cpp. Plusieurs méthodes dans ces classes l'utilisent. Je vais l'initialiser avec une valeur que ne va pas dans mon code.

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par kochfet Voir le message
    En fait, cette variable globale va être appeler dans C1.cpp, C2.cpp et C3.cpp. Plusieurs méthodes dans ces classes l'utilisent.
    Ca, je m'en serais quand même douté La question que je te pose, c'est "pourquoi voudrais tu que ce soit une variable globale "

    As tu conscience que ta variable globale risque d'être modifiée par chacune de tes classes et fonctions Te rend tu comptes que, selon ton flux d'exécution, tu ne pourras plus faire la moindre assertion en ce qui concerne cette variable globale parce que la reproductibilité du comportement ne pourra plus être assurée Et je ne parle même pas des problèmes inhérents aux tentatives d'utilisation dans un contexte multithread

    Je reprends donc ma question : dis moi ce que tu veux faire de cette variable globale, mais un peu plus clairement que "Plusieurs méthodes dans ces classes l'utilisent." pour que je puisse t'expliquer comment t'en passer
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre très actif
    Inscrit en
    Février 2011
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 188
    Par défaut
    pourquoi voudrais tu que ce soit une variable globale
    Puisque je vais utiliser sa valeur dans plusieurs classes, j'aime pas qu'à chaque fois je veux la déclarer. Aussi, a chaque exécution de mon code, je veux tester ce dernier avec une valeur différente de cette variable. Donc, je ne veux pas changer sa valeur dans toutes les classes à chaque exécution.

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par kochfet Voir le message
    Puisque je vais utiliser sa valeur dans plusieurs classes, j'aime pas qu'à chaque fois je veux la déclarer.
    Tu as bien tord conceptuellement parlant : s'il n'y a aucune raison pour que la valeur de ta variable dans une fonction de A soit identique à celle de la variable dans une fonction de B, il n'y a aucune raison de faire en sorte que A et B partagent la même valeur
    Aussi, a chaque exécution de mon code, je veux tester ce dernier avec une valeur différente de cette variable. Donc, je ne veux pas changer sa valeur dans toutes les classes à chaque exécution.
    As tu déjà entendu parler des constructeurs Si tu veux définir une valeur spécifique pour une variable qui est utilisée par A et que cette même valeur doit être utilisée (mais pas partagée) par B, c'est très certainement la solution idéale. Tu pourras même en arriver à définir cette variable sur base d'une entrée de la part de l'utilisateur

    Que penserais tu d'un code (fais un copier / coller et compile le, il fonctionnera ) proche de
    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
    53
    54
    55
    56
    57
    58
    59
    #include <iostream>
    class A{
        public:
            A(int i): i_(i){}
            void print() const{std::cout<<i_<<std::endl;}
        private:
            int i_;
    };
    class B{
            B(int i): i_(i){}
            void print() const{std::cout<<i_<<std::endl;}
        private:
            int i_;
    };
    class C{
            C(int i): i_(i){}
            void print() const{std::cout<<i_<<std::endl;}
        private:
            int i_;
    };
    int main(){
        int value1 = 15;
        int value2 = 20;
        {
            std::cout<<"dans ce groupe, toutes les valeurs sont identiques et sont égale à " value1<<std::endl
            A a(value1);
            B b(value1);
            C c(value1);
            /* création d'un premier groupe de variables */
           std::cout<<"la preuve : "<<std::endl
           a.print();
           b.print();
           c.print();
        }
        {
            std::cout<<"dans ce groupe, toutes les valeurs sont identiques et sont égale à " value2<<std::endl
            A a(value2);
            B b(value2);
            C c(value2);
            /* création d'un premier groupe de variables */
           std::cout<<"la preuve : "<<std::endl
           a.print();
           b.print();
           c.print();
        }
        {
            std::cout<<"et dans ce groupe, A et C ont disposent de la valeur "<<value1
                     <<"alors que B dispose de la valeur "<<value2<<std::endl;
            A a(value1);
            B b(value2);
            C c(value1);
            /* création d'un premier groupe de variables */
           std::cout<<"la preuve : "<<std::endl
           a.print();
           b.print();
           c.print();
        }
        return 0;
    }
    Comme tu peux le constater, je crois avoir fait exactement ce que tu voulais sans avoir à utiliser de variable globale
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Réponses: 8
    Dernier message: 20/06/2006, 16h25
  2. Problème avec les variables en PHP
    Par King_T dans le forum Langage
    Réponses: 3
    Dernier message: 06/05/2006, 23h46
  3. Problèmes avec les variables et les unités
    Par christoufe dans le forum EDI
    Réponses: 2
    Dernier message: 22/01/2006, 16h22
  4. Problèmes avec les variables final
    Par casolaro dans le forum Langage
    Réponses: 7
    Dernier message: 09/12/2004, 14h29
  5. Réponses: 6
    Dernier message: 28/05/2004, 09h39

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