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 :

variable globale "interclasses"


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Inscrit en
    Janvier 2005
    Messages
    104
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Par d�faut variable globale "interclasses"
    Bonjour,

    Petite question de pure programmation : comment partager des variables entre plusieurs classes (contenues dans diff�rents fichiers) ?

    J'avais pens� � mettre mes d�clarations avec le mot cl� extern dans un .h que j'inclus dans chaque .cpp interess�, mais j'ai des erreurs...

    Quelle est la meilleure d�marche � suivre dans ces cas l� ?

  2. #2
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    En C++, on evite autant que possible les variables globales.

    Sinon, voir la FAQ C

    http://c.developpez.com/faq/c/?page=...TYPES_globales

  3. #3
    Sh.
    Sh. est d�connect�
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    28
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 28
    Par d�faut
    pourquoi les �vitons nous ??

  4. #4
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Je pense qu'avec un peu de recherche tu pourrais trouver tout un tas de d�bats sur le sujet, et pas plus loin que sur ce forum.

  5. #5
    Sh.
    Sh. est d�connect�
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    28
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 28
    Par d�faut
    ouais, mais je vais tomber sur des trolls ? :p
    =

  6. #6
    jmv
    jmv est d�connect�
    Membre chevronn� Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    D�tails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par d�faut
    variables globales ==> les fonctions qui les utilisent ne sont plus r�entrantes, pb d'acc�s concurrents en multithread, d�pendances des modules par rapport � ces variables (si on change le nom d'une variable globale, il faut revoir tout le code) etc,...

    si vraiment te ne peux pas faire autrement (ce qui m'�tonerait) tu peux faire comme ceci pour limiter leur port� :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // VariablesGlobales.h ------------------
    class VariablesGlobales
    {
        friend class A;
        friend class B;
    private:
        static int uneVariableGlobale;
        static double uneAute;
    };
     
    // VariablesGlobales.cpp -----------------
    #include "VariablesGlobales.h"
    int    VariablesGlobales::uneVariableGlobale = 0;
    double VariablesGlobales::uneAutre = 0.0;
    mais c'est de la bidouille

  7. #7
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Ou faire d�river d'une me�m classe qui donne acc�s � la variable encapsul�e:
    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
     
    class SharedData
    {
    protected:
        static int SharedVariable;
    };
    int SharedData::SharedVariable = 0;
     
    class A : public SharedData
    {
    };
     
    class B : public SharedData
    {
    };
    A et B ont acc�s � SharedData::SharedVariable.

  8. #8
    Membre confirm�
    Inscrit en
    Janvier 2005
    Messages
    104
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Par d�faut erreur de lien... et questions sur les classes MFC AppWizard
    Merci pour ces m�thodes qui semblent plus propres... Mais j'ai toujours la m�me erreur de lien :

    IODlg.obj : error LNK2001: unresolved external symbol "private: static class CObjectGUI * * SharedData::objectsGUItab" (?objectsGUItab@SharedData@@0PAPAVCObjectGUI@@A)

    IODlg.obj : error LNK2001: unresolved external symbol "private: static int SharedData::objectsGUItab_i" (?objectsGUItab_i@SharedData@@0HA)
    Mon .h est le suivant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "objectGUI.h"
    #define MAX_OBJECTS_NB					255
     
    class SharedData
    {
        friend class CGui_testView;
        friend class CIODlg;
    private:
    	static CObjectGUI * objectsGUItab[MAX_OBJECTS_NB];
    	static int objectsGUItab_i;
    };
    et j'acc�de aux variables dans une fonction de la classe CIODlg comme suit :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    SharedData::objectsGUItab[SharedData::objectsGUItab_i++]=attachedGUIObj;

    Bien sur j'ai essay� d'�viter les variables globales, mais je ne sais pas si c'est possible dans mon cas que je vais essayer de vous expliquer simplement :

    J'ai une application graphique cr��e avec MFC AppWizard dans laquelle je veux que l'utilisateur puisse placer des objets, les d�placer... Je veux donc placer mes objets dans un tableau de CBitmapButton. Il sont cr��s dans une classe en relation avec les dialog box demandant des informations avant la cr�ation, mais doivent �tre affich�s gr�ce au OnDraw de la classe CGui_testView (mon nom de projet est gui_test). A moins qu'il y ai un autre moyen pour afficher ces fameux CBitmapButton dans "l'espace blanc central" de cette appli MFC ? Et donc le probl�me est que la classe CGui_testView est appel�e avec :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    	pDocTemplate = new CSingleDocTemplate(
    		IDR_MAINFRAME,
    		RUNTIME_CLASS(CGui_testDoc),
    		RUNTIME_CLASS(CMainFrame),      
    		RUNTIME_CLASS(CGui_testView));
    Il n'y a donc pas d'objet de type CGui_testView � partir duquel r�cup�rer la valeur de certains membres ?


    [Balises CODE rajout�es par Loulou24, merci d'y penser � l'avenir]

  9. #9
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Pour la mani�re d'utiliser les variables membres statiques, voir dans la FAQ C++.

  10. #10
    jmv
    jmv est d�connect�
    Membre chevronn� Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    D�tails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par d�faut Re: erreur de lien... et questions sur les classes MFC AppWi
    Citation Envoy� par pi05
    Mon .h est le suivant :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "objectGUI.h"
    #define MAX_OBJECTS_NB					255
     
    class SharedData
    {
        friend class CGui_testView;
        friend class CIODlg;
    private:
    	static CObjectGUI * objectsGUItab[MAX_OBJECTS_NB];
    	static int objectsGUItab_i;
    };
    Et le .cpp ?

Discussions similaires

  1. R�ponses: 6
    Dernier message: 01/05/2009, 16h35

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