LOCODUINO
Parlons Arduino => Débuter => Discussion démarrée par: Tony04 le avril 26, 2020, 12:11:34 pm
-
Bonjour,
j'ai presque honte de poser la question ci-dessous, mais je n'aime pas ne pas comprendre.
J'ai beau relire l'article de Thierry sur les pointeurs (dont je n'ai toujours pas tout compris): https://www.locoduino.org/spip.php?article106 ,je ne trouve pas la solution à mon problème.
Mon code:
char* menu_locos[]={
"Loco : ~",
"Canal : ~",
"Vitesse ralenti: ~",
"Vitesse normale: ~"};
Le message d'erreur (non bloquant) du compilateur:
centrale.ino:98:23: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
"Vitesse normale: ~"};
^
Où est l'erreur, ou ne faut-il tout simplement pas tenir compte de ce message ?
Bon dimanche à tous.
Cordialement
Antoine
-
Bonjour Antoine.
Il n'y a pas de honte, le langage C est plein de pièges et très technique.
Tu as un tableau de pointeurs vers des chaines qui étant litérales, sont des constantes.
Or ton tableau est un tableau de pointeur vers des variables
Le compilateur d'avertit que c'est pas bien de faire passer des constantes pour des variables 8)
Il faut écrire :
const char* menu_locos[]={
"Loco : ~",
"Canal : ~",
"Vitesse ralenti: ~",
"Vitesse normale: ~"
};
-
D'ailleurs, si tu veux aller au bout, tes pointeurs sont des pointeurs vers des constantes mais ils sont également constants eux même car je suppose que nulle part dans le programme tu ne désires écrire
menu_locos[0] = "titi";
Dans ce cas il faudrait l'indiquer de la manière suivante :
const char* const menu_locos[]={
"Loco : ~",
"Canal : ~",
"Vitesse ralenti: ~",
"Vitesse normale: ~"
};
Ici tu déclares un tableau de pointeurs constants (2e const) vers des constantes (1er const)
-
Bonjour et merci Jean-Luc,
en y réfléchissant à 2 fois et surtout avec ton explication, le message du compilateur semble justifié.
Antoine