multiple definition of `remote_name

Bonjour
J'utilise platformio.
J'ai plusieurs cpp qui font appel au même fichier vars.h qui contient des constantes globales.
Et j'obtiens cette erreur :

.pio/build/esp32dev/src/rs_webserver.cpp.o:(.data.remote_name+0x0): multiple definition of `remote_name'
.pio/build/esp32dev/src/prgm.cpp.o:(.data.remote_name+0x0): first defined here

Je vais trouver une solution.
Cependant, je pensais que le fait d'encadrer le code de vars.h avec :

#ifndef VARS_H_
#define VARS_H_

#define delay_after_move

#define REMOTES_COUNT 3

const char *remote_name[REMOTES_COUNT] = { 
  (char *)"Cuisine", 
  (char *)"Salon",
  (char *)"Salle à M.",
};

#endif /* VARS_H_ */

permettait de se prémunir de ce genre d'erreur.
J'ai mal compris ?

Merci.

David.

Bonjour,

Oui, tu as mal compris. Le #ifndef permet de ne pas inclure plusieurs fois le .h dans le même fichier .ino ou .cpp.
Mais si tu compiles plusieurs fichiers .cpp qui incluent ce .h, le .h est forcément inclus plusieurs fois dans le projet.

Il ne faut pas mettre de définitions de variables ou de tableau de constantes dans un .h

Merci !

Dans le fichier .h, tu déclares un variable globale par :

extern const char* remotenames;

le mot clé extern est important !

Puis dans un seul fichier cpp, ou dans le .ino, tu déclares:

const char* remotenames = ...les valeurs d'initialisation...;

sans le extern

Merci, j'avais en effet trouvé cette solution.