constante dans enum

bonjour,

j'écrit un petit bout de code pour le contrôle de lumière en DMX.

Pour les fonctions de chaque appareil je fait un enum de ces fonctions. La valeur première fonctions de l'enum doit correspondre a l'adresse DMX de l'appareil. Je fait donc cela (extrait simplifier/regrouper):

const int dmxSpot1 = 1; // adresse du premier spot
  const int nbr2CHSpot1 = 5; // nombre de canal spot 1
  const int dmxSpot2 = dmxSpot1+nbr2CHSpot1;
  
  enum {DIMMING = dmxSpot2, STROBE , VOICE, SPEED , ROUGE , VERT , BLEU };

Mais le compilateur bloc par ce message : "dmxSpot2 is not usable in a constant expression"

Pouvez vous me dire comment faire svp

merci

Bonjour,

Il manque des ; à la fin des définitions const.

slt,
oups oui, c’est quand j’ai tout recopier.
ils y sont bien dans mon code.
je rectifie dans le post, merci kamill

Salut ,

je viens de faire l' essai chez moi avec le code en post #1 , aucun probleme a signaler , meme pas un warning :)

Je vous joint donc le code en entier
vous devriez avoir l’erreur lol

Programme_DMX_DjBouns.zip (9.01 KB)

Salut

Pouvez vous poster tout le message d’erreur ?

Bonjour Jm

je reposte le code en entier car j'ai avancé dessus et le message d'erreur en entier:

sketch/SpotLed2.cpp: In function 'void SpotLed2(int, int, bool)':
SpotLed2.cpp:30:19: error: the value of 'CanalDmxSpotLed2' is not usable in a constant expression
   enum {DIMMING = CanalDmxSpotLed2, STROBE, VOICE, SPEED, ROUGE, VERT, BLEU};
                   ^~~~~~~~~~~~~~~~
In file included from sketch/SpotLed2.cpp:4:0:
sketch/fonctions.h:5:39: note: 'CanalDmxSpotLed2' was not initialized with a constant expression
 extern const uint8_t CanalDmxSpotLed1,CanalDmxSpotLed2,CanalDmxSpotLed3,CanalDmxSpotLed4,CanalDmxSpotLed5;
                                       ^~~~~~~~~~~~~~~~
SpotLed2.cpp:30:19: error: the value of 'CanalDmxSpotLed2' is not usable in a constant expression
   enum {DIMMING = CanalDmxSpotLed2, STROBE, VOICE, SPEED, ROUGE, VERT, BLEU};
                   ^~~~~~~~~~~~~~~~
In file included from sketch/SpotLed2.cpp:4:0:
sketch/fonctions.h:5:39: note: 'CanalDmxSpotLed2' was not initialized with a constant expression
 extern const uint8_t CanalDmxSpotLed1,CanalDmxSpotLed2,CanalDmxSpotLed3,CanalDmxSpotLed4,CanalDmxSpotLed5;
                                       ^~~~~~~~~~~~~~~~
SpotLed2.cpp:30:19: error: enumerator value for 'DIMMING' is not an integer constant
   enum {DIMMING = CanalDmxSpotLed2, STROBE, VOICE, SPEED, ROUGE, VERT, BLEU};
                   ^~~~~~~~~~~~~~~~
exit status 1
the value of 'CanalDmxSpotLed2' is not usable in a constant expression

Je ne peux pas tester mais essayez d’abord avec

  constexpr int dmxSpot1 = 1; // adresse du premier spot
  constexpr int nbr2CHSpot1 = 5; // nombre de canal spot 1
  constexpr int dmxSpot2 = dmxSpot1+nbr2CHSpot1;

Si les valeurs ne sont pas définies dans le même fichier que votre enum c’est peut être le souci => essayez de mettre l’énumération dans le fichier

Si ça ne marche pas mieux et qu’ils sont dans le même fichier alors faudra passer par des #define

le problème reste le même

mes enum sont a l'intérieur d'une fonction (il corresponde a chaque canal de commande de chaque lumière et je ne peux pas mettre l'enum en dehors car les même terme non pas la même valeur pour chaque lumière)

avec les #defines, quelle serait la méthode a appliquer ?

Je pensais à un truc du genre

#define dmxSpot1  (1) // adresse du premier spot
#define nbr2CHSpot1 (5) // nombre de canal spot 1
#define dmxSpot2 (dmxSpot1+nbr2CHSpot1);

ok c'est bien se que je pensait mais donc le problème reste le même

Même avec les define il se plaint ?

:D :D :D oui oui, tout pareil "'CanalDmxSpotLed2' was not initialized with a constant expression"

C’est louche car c’est bien une constante le Pré compilateur Devrait faire l’addition...

Je suis en vadrouille sans ordinateur donc je ne peux pas tester facilement

Vous avez essayé de faire un mini code pour reproduire ce que vous voyez ?

djbouns: Bonjour Jm

je reposte le code en entier car j'ai avancé dessus et le message d'erreur en entier:

vous n'avez pas reposté le code