Operateur++ sur un enum - C++ - Programmation
Marsh Posté le 26-08-2005 à 15:34:52
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 ...
Marsh Posté le 26-08-2005 à 15:38:07
Taz a écrit : t'es un drôle toi ... tu définis ++ en fonction de ++ |
Bah, oui, il définit un opérateur ++ postfixé, donc ca dépend du ++ préfixé non ?
(sinon, ce ne serait pas mieux de faire un itérateur qui sorte une à une toutes les valeurs possibles de l'enum ?)
Marsh Posté le 26-08-2005 à 15:44:03
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.
Marsh Posté le 26-08-2005 à 16:06:16
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 ...
Marsh Posté le 26-08-2005 à 16:17:15
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?
Marsh Posté le 26-08-2005 à 16:30:37
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 ...
Marsh Posté le 27-08-2005 à 13:36:20
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 :
|
me trompe-je ?
je me demande si il vaudrait pas mieux chercher un autre type que l'enum pour ton probleme
Marsh Posté le 27-08-2005 à 16:26:24
clair, mais la mes enum(s) se suivent puisqu'ils représententent les étapes d'un graph.
Marsh Posté le 28-08-2005 à 23:36:46
diverses solutions "génériques":
Code :
|
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)
Marsh Posté le 29-08-2005 à 09:16:27
Pour l'instant j'ai effectivement fait un cast de sauvage ...
Merci.
Marsh Posté le 26-08-2005 à 15:08:25
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 :
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.