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 397
    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 397
    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