[C++] Variables globales et switch()

Voir le sujet précédent Voir le sujet suivant Aller en bas

[C++] Variables globales et switch()

Message  Dj x-fuse le Ven 23 Sep 2011, 14:48

Bonjour / Bonsoir à tous,

J'ai un petit soucis dans mon main.cpp :

J'ai une variable globale (donc déclarée avant le main()) et quand je souhaites l'utiliser comme valeur de case dans un switch, j'ai cette erreur :
../src/main.cpp:30: error: 'var' cannot appear in a constant-expression
Cela signifie donc que je suis obligé d'utiliser une constante car le switch est calculé à la compilation et non à l'exécution.

Quelqu'un as-t-il une petite idée de comment passer ce problème en gardant le switch (j'aimerais éviter une suite de if).

Merci Smile

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [C++] Variables globales et switch()

Message  LSV le Ven 23 Sep 2011, 15:01

hm créé une variable dans ton main, copie la valeur de ta variable globale dedans, et utilise cette variable dans le switch?

(vraiment pas sur du tout) (mais des variables globales... Very Happy)

LSV

Nombre de messages : 638
Age : 27
Prénom : Jérome
Statut : Diplomé 2013
Localisation : Anderlecht
Date d'inscription : 24/09/2007

Revenir en haut Aller en bas

Re: [C++] Variables globales et switch()

Message  smb le Ven 23 Sep 2011, 15:13

Dj x-fuse a écrit:Bonjour / Bonsoir à tous,

J'ai un petit soucis dans mon main.cpp :

J'ai une variable globale (donc déclarée avant le main()) et quand je souhaites l'utiliser comme valeur de case dans un switch, j'ai cette erreur :
../src/main.cpp:30: error: 'var' cannot appear in a constant-expression
Cela signifie donc que je suis obligé d'utiliser une constante car le switch est calculé à la compilation et non à l'exécution.

Quelqu'un as-t-il une petite idée de comment passer ce problème en gardant le switch (j'aimerais éviter une suite de if).

Merci Smile

Le plus simple serait de montrer le switch afin qu'on sache ce que tu veux faire !

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [C++] Variables globales et switch()

Message  Dj x-fuse le Ven 23 Sep 2011, 15:45

J'ai une liste de choix à afficher en console :

1. Faire quelque chose
2. Faire autre chose
3. etc etc

Si dans l'objet MonJeu j'ai des variables qui sont équivalentes à 0, alors je ne dois pas afficher certains choix. Ainsi, si je met uniquement des if dans ma fonction de choix (qui fait uniquement du cout << string) j'aurais quelque chose de ce style :

2. Faire autre chose
4. bla bla bla

Vous comprendrez bien que c'est pas "top" d'avoir les choix 2 et 4 et pas plutôt 1 et 2 (qui semble plus logique pour l'utilisateur).

De ce fait, j'ai imagine faire un compteur de ce style :

Code:

unsigned maFct(int a, int b){
unsigned i = 0;
unsigned choix;
if(a > 0){
i++;
faireQuelqueChose = i;
cout << i << ". Faire quelque chose" << endl;
}
if(b > 0){
i++;
faireAutreChose = i;
cout << i << ". Faire autre chose" << endl;
}
i++;
troisiemeAction = i;
cout << i << ". Une troisième action qui ne nécessite pas de variables supérieur à 0" << endl;
cin >> choix;
return choix;
}

Ca, c'est ma fonction qui permet d'afficher les choix.
Maintenant, en fonction du choix, dans mon main j'ai quelque chose de ce style :

Code:

switch(choix){
case faireQuelqueChose : ...
break;
case faireAutreChose : ...
break;
...
}

A ce stade, si j'initialise mes variables globales respectivement à -1, -2, -3, ... (si il est nécessaire de les initialiser dans la partie header) je saurais que si j'ai la possibilité de "faire quelque chose", il sera affiché et je rentrerais dedans dans mon switch.

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [C++] Variables globales et switch()

Message  nvs le Ven 23 Sep 2011, 16:50

Dj x-fuse a écrit:J'ai une variable globale
c'est mal affraid

Dj x-fuse a écrit:(donc déclarée avant le main()) et quand je souhaites l'utiliser comme valeur de case dans un switch, j'ai cette erreur :
../src/main.cpp:30: error: 'var' cannot appear in a constant-expression
Cela signifie donc que je suis obligé d'utiliser une constante car le switch est calculé à la compilation et non à l'exécution.

Quelqu'un as-t-il une petite idée de comment passer ce problème en gardant le switch (j'aimerais éviter une suite de if).
il n'y a que le if qui peut le faire. mais le plus important c'est de virer cette variable globale...







monkey

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [C++] Variables globales et switch()

Message  Dj x-fuse le Ven 23 Sep 2011, 21:39

nvs a écrit:mais le plus important c'est de virer cette variable globale...
C'est fait, mais bon alors je reste dans le simple d'avoir 2 et 4 (pour reprendre mon exemple), sinon oui, avec des if sa résous mon prob, mais c'est moche comme code (oh le geek :p)

Et comme ça pour savoir, pourquoi c'est une mauvaise idée les variables globales ? Est-ce un problème de sécurité, de performances ou simplement d'ordre de mauvaise pratique ?

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [C++] Variables globales et switch()

Message  nvs le Dim 25 Sep 2011, 21:08

Dj x-fuse a écrit:Et comme ça pour savoir, pourquoi c'est une mauvaise idée les variables globales ? Est-ce un problème de sécurité, de performances ou simplement d'ordre de mauvaise pratique ?
quoi, personne pour répondre à Dj x-fuse ?






@

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [C++] Variables globales et switch()

Message  mvh le Dim 25 Sep 2011, 21:15

nvs a écrit:
Dj x-fuse a écrit:Et comme ça pour savoir, pourquoi c'est une mauvaise idée les variables globales ? Est-ce un problème de sécurité, de performances ou simplement d'ordre de mauvaise pratique ?
quoi, personne pour répondre à Dj x-fuse ?
@

non mais je suis curieux de savoir ... à l'occasion je fais du PERL (comme un politiquement incorrect) ... et je ne déclare même pas les variables et c'est bien pratique pour ne pas être emboucané par des warning à l'envi Smile
(mais ce n'est peut-être point un exemple à suivre)

_________________

La fête c'est nul sans Kidibul !
... (vieux proverbe local)



mvh

Nombre de messages : 5973
Age : 104
Prénom : Marcel VANHAELEN
Statut : (fin de bail)
Win 3.1 à reprendre
Localisation : Koekeliek de Baselberg
Date d'inscription : 06/12/2006

Revenir en haut Aller en bas

Re: [C++] Variables globales et switch()

Message  iCart le Dim 25 Sep 2011, 23:45

nvs a écrit:
Dj x-fuse a écrit:Et comme ça pour savoir, pourquoi c'est une mauvaise idée les variables globales ? Est-ce un problème de sécurité, de performances ou simplement d'ordre de mauvaise pratique ?
quoi, personne pour répondre à Dj x-fuse ?






@

Si vous insistez Razz

Mais comme je suis feignant et peu original, je me contenterai de dire ceci :
http://fr.wikipedia.org/wiki/Variable_globale#Inconv.C3.A9nients

iCart

Nombre de messages : 58
Age : 27
Prénom : Sylvain
Statut : Echappé 2013
Date d'inscription : 09/12/2009

Revenir en haut Aller en bas

Re: [C++] Variables globales et switch()

Message  nvs le Dim 25 Sep 2011, 23:47

merci Smile





silent

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [C++] Variables globales et switch()

Message  Contenu sponsorisé Aujourd'hui à 18:56


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum