Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1210 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Operateur++ sur un enum

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Operateur++ sur un enum

n°1185356
cricri_
Posté le 26-08-2005 à 15:08:25  profilanswer
 

J'ai donc un enum qui contient toutes mes étapes d'un genre de graph ou automate, j'ai besoin de l'incrémenter, j'ai donc essayer de créer un operateur++ en m'aidant de la doc, mais j'avoue ne pas du tout me sentir à l'aise avec ces définitions d'opérateur ...
Voilà ce que j'ai écrit :

Code :
  1. enum STATE_EXE { NO_ST, ...};
  2. friend const STATE_EXE& operator++( const STATE_EXE& a) { return ++a; }


 
l'opérateur est défini dans une classe, pas l'enum, je ne sais pas si c'est pour ça que j'ai dû mettre friend ... mais sinon j'ai ces erreurs :
midasctl.h(153) : error C2807: the second formal parameter to postfix 'operator ++' must be 'int'
midasctl.h(153) : error C2333: '++' : error in function declaration; skipping function body
 
 
Hormis ça cela compile, pas de pb, par contre à l'exécution de l'instruction de pré-incrémentation de la variable de type STATE_EXE j'ai un stack overflow la première fois, hors je suis largement dans les bornes de l'enum, et au 2ème passage c'est exception ...
Donc je dois mal définir cette opérateur je pense.
 
Merci.
 

mood
Publicité
Posté le 26-08-2005 à 15:08:25  profilanswer
 

n°1185434
Taz
bisounours-codeur
Posté le 26-08-2005 à 15:34:52  profilanswer
 

t'es un drôle toi ... tu définis ++ en fonction de ++
 
et en plus, tu fous du const partout, mais tu modifies quand même ...

n°1185442
theshockwa​ve
I work at a firm named Koslow
Posté le 26-08-2005 à 15:38:07  profilanswer
 

Taz a écrit :

t'es un drôle toi ... tu définis ++ en fonction de ++
 
et en plus, tu fous du const partout, mais tu modifies quand même ...


 
 
Bah, oui, il définit un opérateur ++ postfixé, donc ca dépend du ++ préfixé non ? [:dawa]
 
(sinon, ce ne serait pas mieux de faire un itérateur qui sorte une à une toutes les valeurs possibles de l'enum ?)

n°1185455
cricri_
Posté le 26-08-2005 à 15:44:03  profilanswer
 

Pour le const ok ...
mais pour le reste je n'ai pas compris, et c'est un opérateur ++ préfixé que je cherche à définir.

n°1185504
cricri_
Posté le 26-08-2005 à 16:06:16  profilanswer
 

Ah vi ... je viens de comprendre d'où vient le pb et donc ta remarque Taz ;)
Mais je ne vois pas comment résoudre mon problème ...

n°1185542
western
AJMM
Posté le 26-08-2005 à 16:17:15  profilanswer
 

une réflexion philosophique:
l'enum a un nombre limité de valeur...
ton opérateur ne fait que l'incrémenter, donc à un moment ou à un autre, il va sortir de l'ensemble des valeurs de ton enum... c'est-à-dire que l'opétateur va retourner une valeur fausse et si ensuite, tu t'en sert comme l'index d'un tableau sans vérifier, tu obtiens une seg. fault ou une exception (et en passant, elle te dit quoi, cette exception?), etc.
 
PS. a++ est équivaut à a=a+1, non?

n°1185563
cricri_
Posté le 26-08-2005 à 16:30:37  profilanswer
 

Oui, mais comme je l'ai dit c'est une valeur d'étape, ça ne sert pas d'index de tableau ou autre, et je contrôle la  borne supérieur.
Et a=a+1 ça me demande égalemant un opérateur pour un enum, donc je tourne en rond ...

n°1185857
Lightness1​024
Posté le 27-08-2005 à 13:36:20  profilanswer
 

une enum c'est une collection de constantes c'est pas fait pour subir des operations arithmétiques meme si l'idée du ++ semble attrayante.
de plus comment savoir si la prochaine constante est à +1 de la précédente.
 
exemple:

Code :
  1. enum
  2. {
  3. bitmask0 = 1,
  4. bitmask1 = 2,
  5. bitmask2 = 4,
  6. bitmask3 = 8
  7. };


 
me trompe-je ?
 
je me demande si il vaudrait pas mieux chercher un autre type que l'enum pour ton probleme :/


---------------
http://projets.6mablog.com/
n°1185929
cricri_
Posté le 27-08-2005 à 16:26:24  profilanswer
 

clair, mais la mes enum(s) se suivent puisqu'ils représententent les étapes d'un graph.

n°1186649
LeGreg
Posté le 28-08-2005 à 23:36:46  profilanswer
 

diverses solutions "génériques":
 

Code :
  1. enum monenum
  2. {
  3.   toto1,
  4.   toto2,
  5.   toto3,
  6.   toto4,
  7. };
  8. monenum GetNextEnum( monenum e )
  9. {
  10.   switch (e)
  11.   {
  12.   case toto1:
  13.     return toto2;
  14.   case toto2:
  15.     return toto3;
  16.   case toto3:
  17.     return toto4;
  18.   case toto4:
  19.     return toto1; // or throw exception.
  20.   default:
  21.     ! WTF.. traiter l'appelant de tous les noms.
  22.   }
  23. }


 
tu peux aussi stocker les valeurs dans un tableau (ou une map si tes valeurs sont éparpillées).
et faire un lookup dedans.
 
Sinon pour faire "+1" sur un enum, tu peux le convertir explicitement en unsigned int mais évidemment
ça ne marche que si les valeurs numériques de ta représentation se suivent exactement.
(compile time assert)

mood
Publicité
Posté le 28-08-2005 à 23:36:46  profilanswer
 

n°1186708
cricri_
Posté le 29-08-2005 à 09:16:27  profilanswer
 

Pour l'instant j'ai effectivement fait un cast de sauvage ...
Merci.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Operateur++ sur un enum

 

Sujets relatifs
paramètre template constant et type sous jacent d'enum[PHP - MySQL] Récupérer choix d'un "enum" dans BDD
[Resolu] Validation HTML VS operateur de comparaison PHPMAP (::STL) - Definir un nouvel operateur de comparaison
Surcharger l'operateur [] en C#Enum en Mysql
surcharge de l'operateur []affichage d'un typedef enum
[C#] UserControl, enum et ResourcesOpérateur unaire +
Plus de sujets relatifs à : Operateur++ sur un enum


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR