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 :

Variables globale ou pas?


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Points : 48
    Points
    48
    Par défaut Variables globale ou pas?
    bonjour, je bute sur un probleme plutot simple.
    J'ai deux fichier cpp qui contiennent chacun une méthode et possede chacun un fichier .h. La méthode du premier fichier utilise des variables du deuxieme fichier.J'ai bien fait un include du deuxieme fichier .h
    J'ai une erreur qui me dit que ces variables ne sont pas déclarer.

    Est-il possible de ne pas utiliser de variable globale pour ces variables ou pas?
    Sachant aussi que je ne peux pas utilisé d'attribut en entrée.

    Merci d'avance pour vos réponses.

  2. #2
    Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Points : 48
    Points
    48
    Par défaut
    voici le code attention ce code et specifique au MFC mais vu que mon probleme est purement c++, je poste ici.

    code du premier
    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
     
    void CStartConfigBagues::OnChangeTap(UINT nID)
    {
    	int nIndex;
    	CString str;
    	UpdateData(TRUE);
     
    	switch (nID)
    	{
    		case IDC_TAP_INT:
                                          //recupere la position ou l'on a cliké
    			cData.iTap[INTERNAL] = m_tap[INTERNAL].GetCurSel();
                                          //si on se trouve sur la ligne 0 2 ou 5
    			if(m_tap[INTERNAL].GetCurSel() == 0 || m_tap[INTERNAL].GetCurSel() == 2 ||m_tap[INTERNAL].GetCurSel() == 5)
    			{
    				for(int j=0 ; j <= 5; j++)
    				{
                                                                   //on efface tout le contenue
    					m_type[NoType].DeleteString( 0 );
    				}
                                                                   // on écrit le nouveau contenue
    					 str.Format("Autre");
    					 nIndex = m_type[NoType].AddString( str );
    					 str.Format("Hexagonale");
    					 nIndex = m_type[NoType].AddString( str );
    					 str.Format("6 pans creux");
    					 nIndex = m_type[NoType].AddString( str );
    					 str.Format("A embase");
    					 nIndex = m_type[NoType].AddString( str );
    			}
    			else
    			{
    				if(m_tap[INTERNAL].GetCurSel() == 1 ||m_tap[INTERNAL].GetCurSel() == 3 ||m_tap[INTERNAL].GetCurSel() == 4)
    				{
    					for(int j=0 ; j <= 6; j++)
    					{
    						m_type[NoType].DeleteString( 0 );
    					}
    					 str.Format("Ecrou hexagonal");
    					 nIndex = m_type[NoType].AddString( str );
    					 GetDlgItem(IDC_TYPE_HEAD)->EnableWindow(m_type[NoType].GetCheck());
    				}
    			}
    			break;
    		case IDC_TAP_EXT:
    			cData.iTap[EXTERNAL] = m_tap[EXTERNAL].GetCurSel();
    			break;
    	}
    }
    code du deuxieme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
          //declaration du bouton avec sa variable
          DDX_Control(pDX, IDC_TYPE_HEAD + noType, m_type[noType]);
    void CScrewDlg::OnType(UINT nID)
     
    {
     
       noType = nID - IDC_TYPE_HEAD;
     
       cData.fastenerType[ringType[CURR]][noType] = m_type[noType].GetCurSel();
     
    }
    je pense avoir tout mis. Si il y a besoin de plus d'explication je suis disponible

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    A priori, pas de problème pour faire ça.

    J'ai une erreur qui me dit que ces variables ne sont pas déclarer.
    Pas déclarées ou pas définies ?
    Mot clef extern ?
    Compilateur / linkeur utilisés ?

    --EDIT--
    Hum le code posté est un peu confus.
    Quelle variable pose problème ?
    Quel est le message d'erreur ?
    Dernière modification par Invité(e) ; 10/06/2008 à 15h00. Motif: Vu second post

  4. #4
    Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Points : 48
    Points
    48
    Par défaut
    les deux variables non déclarées sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int NoType;
    CMYCOMBOBOX m_type[];
    Je voudrai évité de les mettre en variable globale.

    l'erreur est :

    error C2065: 'm_type'*: identificateur non déclaré
    error C2065: 'NoType'*: identificateur non déclaré
    error C2228: la partie gauche de '.AddString' doit avoir un type class/struct/union

    Le code que j'ai fournie fait partie d'un projet de 40 fichiers cpp et autant de .h donc desolé de ne pas pouvoir tout mettre le premier fichier fait 1200 lignes j'ai donc pris la liberté de raccourcir à l'essentiel.

  5. #5
    Membre averti Avatar de zabibof
    Inscrit en
    Février 2007
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 188
    Points : 344
    Points
    344
    Par défaut
    Bon, je dis ça comme ça mais t'es sûr que ce n'est pas un problème de ";" ou d'accolade?

  6. #6
    Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Points : 48
    Points
    48
    Par défaut
    oui j'ai déjà vérifier le probleme vient du fait que les deux méthodes font partie de deux fichiers différents.
    Je veux bien les mettre en globale mais pour le m_type[] c'est une combobox et ça ne se met pas en global.

  7. #7
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Points : 410
    Points
    410
    Par défaut
    Bonjour,

    attention :
    n'est pas
    J'ai deux fichier cpp qui contiennent chacun une méthode et possede chacun un fichier .h. La méthode du premier fichier utilise des variables du deuxieme fichier.J'ai bien fait un include du deuxieme fichier .h
    Par ailleurs, puisque tu programmes en C++ et en utilisant des objets, tu devrais t'intéresser, non pas au fichier dans lequel tu déclares tes variable, mais à la classe à laquelle elle appartient.

    Quand tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void CStartConfigBagues::OnChangeTap(UINT nID)
    {
    	m_type[...]
    	...
    }
    tu te réfères à priori à la variable m_type de l'a classe CStartConfigBagues.

    Quand tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void CScrewDlg::OnType(UINT nID)
    {
    	m_type[...]
    	...
    }
    tu te réfères à priori à la variable m_type de l'a classe CScrewDlg.

    Si tu ne voie pas la différence, ce n'est pas grave. Cela veut simplement dire que tu dois apprendre le C++ avant de commencer à en faire. Tu peux te référer au mégacours, pour cela. C'est un processus un peu long, mais inévitable pour qui veut devenir programmeur.

  8. #8
    Invité(e)
    Invité(e)
    Par défaut
    Je voudrai évité de les mettre en variable globale.
    Je ne suis pas sur de suivre...

    Ce sont les données membres d'une classe ou non ?
    Si oui, statiques ou pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //Pour accéder à une variable public d'un objet : 
    class maClasse{
       int maVariable;
    };
    maClasse MonObjet;
    monObjet.maVariable = ...;
     
    //Pour accéder à une variable public et statique d'une classe :
    class maClasse{
       static int maVariable;
    };
    maClasse::maVariable=...;

  9. #9
    Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Points : 48
    Points
    48
    Par défaut
    Il s'agissait de méthodes comprises dans deux classe différentes c'est là mon erreur.

    Merci de me l'avoir fait remarquer j'avais zapé l'appartenance à la classe.
    Je me débrouille pas trop mal en c++ mais il m'arrive de faire des erreurs de débutant. .
    Désolé pour cette question triviale. A++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Visual Studio] Variables globales en pas à pas
    Par Sourdun dans le forum Fortran
    Réponses: 0
    Dernier message: 03/04/2009, 14h37
  2. je n'arrive pas à récupérer la valeur de ma variable globale
    Par beegees dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/03/2009, 15h24
  3. Variable globale, pas globale.
    Par nuphius dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/02/2009, 19h07
  4. Réponses: 15
    Dernier message: 12/08/2008, 13h30
  5. Probleme : Variables globales pas accessible
    Par ickylevel dans le forum Général Python
    Réponses: 7
    Dernier message: 09/08/2007, 22h26

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