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 :

declaration variable global


Sujet :

C++

  1. #1
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 296
    Par défaut declaration variable global
    Bonjour,

    donc j'ai 2 fichiers f1.cpp et f2.cpp
    je voudrai declarer une variable globale dans f1.cpp et l'utiliser dans une fonction du fichier f2.cpp

    Voici ce que j'ai ecrit, est ce que c'est correct?

    declaration dans f1.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include 
     
    std::string var_glob;
    dans une fonction de f1.cpp
    dans une fonction de f2.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::string val = f1.cpp::var_glob;

    merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Par défaut
    et pourquoi tu ne définies pas ta variable globale dans ton fichier .h inclus par les deux plutot ...

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 296
    Par défaut
    si tu me dit que sais mieux de faire comme ca
    je le ferais mais il fait que je le declare dans les 2 .h et hors de la class c ca?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Par défaut
    C est juste que si tu as deux fichiers cpp (f2.cpp et f1.cpp) tu dois certainement aussi avoir f1.h et f2.h.

    en gros si ton main est dans f1.cpp par exemple.

    tu dois avoir la structure suivante pour tes fichiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //fichier f1.cpp
     
    #include f1.h
     
    int main(void){
     
    ...
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //fichier f1.h
     
    #include f2.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //fichier f2.cpp
     
    #include f2.h
     
    //définition des fonctions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //fichier f2.h
     
    //ici tu définis ta variable globale que tu pourras utiliser partout :
    string var_glob;
     
    //définition des prototypes des fonctions de f2.cpp

  5. #5
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    f1.cpp::var_glob !? C'est pas du C++ ça .

    Dans f2.cpp, tu dois déclarer var_glob (qui est définie dans f1.cpp, mais t'as même pas à savoir en fait où est-ce que cette variable est défine ...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern std::string var_glob;

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Par défaut
    a mon avis il a meme pas besoin du extern, f2.cpp doit surement etre inclus dans f1.cpp

  7. #7
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Citation Envoyé par Ashin Voir le message
    a mon avis il a meme pas besoin du extern, f2.cpp doit surement etre inclus dans f1.cpp
    Inclure des .cpp c'est très mal.

    En l'occurrence, il peut mettre la déclaration dans f1.h, et la définition dans f1.cpp.

  8. #8
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 296
    Par défaut
    merci mais c ok
    avec external

  9. #9
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    juste pour mettre au point 2/3 choses :

    - le extern est fait justement pour ca

    - la directive include fait un copier coller brutale du code donc tu peux te retrouver avec des redéfinitions de code pas jolies....

  10. #10
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Sinon, plus propre en C++, tu fais une variable statique d'une classe.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Sinon, plus propre en C++, tu fais une variable statique d'une classe.
    [mode : Hype très classe]
    un Singleton même !
    [/mode : Hype très classe]

  12. #12
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 296
    Par défaut
    ca ne fonctionne plus, a quoi j'ai touché!

    Dans f2.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    extern std::string var_glob;
     
    int f2::...
    {
    //repertoire courant
    	char lpBuffer[556]; 
    	GetCurrentDirectory(sizeof(lpBuffer),lpBuffer);
    	var_glob = lpBuffer;
    ...
    }
    Dans f1.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::string rep = var_glob + "\\Data\\devices.txt";

    lors de la compilation il m'indique une erreur dans f1.cpp
    'var_glob' : undeclared identifier

    merci

  13. #13
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    La question qu'il faut que tu te poses, c'est pourquoi ça marche. Là, tu sauras pourquoi ça ne marche plus .

    Pour pouvoir utiliser une variable, il faut qu'elle ait été déclarée avant.

    Pour qu'une variable existe dans le programme, il faut qu'elle ait été définie, une seule fois dans tout le programme.

    Pour les variables globales, la bonne manière de les déclarer, c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern string ma_variable_globale
    (pour une chaîne)

    Une variable peut être déclarée plusieurs fois, du moment que les déclarations sont identiques (ie toujours le même type).

    L'erreur que tu as, c'est que à un endroit du code, tu utilises la variable sans qu'elle ait été déclarée. Quand tu compiles un fichier, les instructions sont lues dans l'ordre, donc si la déclaration ne figure pas dans ce fichier (ou dans un fichier inclus), alors, la variable n'est pas déclarée.

    Pour définir la variable, il faut le faire une seule fois, donc dans un .cpp, de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string ma_variable_globale;
    Et c'est l'éditeur de lien qui se chargera de faire le lien entre les déclarations et la définition.

  14. #14
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 296
    Par défaut
    OK ca refonctionne

    mais j'amerais savoir pourkoi ca a marcher sans redeclaration dans f1.cpp

    merci

Discussions similaires

  1. declaration variable globale
    Par ganjah06 dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 31/07/2008, 00h33
  2. [C#.NET] Declarer variable globale
    Par Ticoche dans le forum Windows Forms
    Réponses: 7
    Dernier message: 31/12/2007, 09h59
  3. Utilisation et Declaration Variable globale
    Par skywaltitou dans le forum MFC
    Réponses: 7
    Dernier message: 28/11/2007, 16h00
  4. Declaration variable globale
    Par abbd dans le forum C++/CLI
    Réponses: 5
    Dernier message: 19/07/2007, 20h02
  5. declaration variable global
    Par zerocoolyoussef dans le forum ASP.NET
    Réponses: 1
    Dernier message: 09/06/2007, 11h53

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