Pourquoi ai-je une erreur sur l'initialiseur n'étant pas une constante?
Je suis en utilisant le code suivant.
const int X_ORIGIN = 1233086;
const int Y_ORIGIN = -4728071;
const int Z_ORIGIN = 4085704;
const int xyzOrigin[NUM_DIMENSIONS] = {X_ORIGIN, Y_ORIGIN, Z_ORIGIN};
Quand je compile, GCC me donne l'erreur suivante.
Transformations.h:16:1: erreur: initialiseur élément n'est pas constante
Ça veut dire quoi? Comment puis-je corriger mon code?
source d'informationauteur CodeKingPlusPlus
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas le faire à la portée globale dans C, à portée locale, c'est à dire à l'intérieur d'une fonction:
Sinon, vous pouvez compiler le code C++ plutôt que de C.
Souvent, les gens sont induits en erreur par la désignation du mot-clé
const
ce qui implique quelque chose d'une valeur constante qui ne peut pas être changé. En C au moins, cela signifie readonly.const
qualifiés d'objets à portée de fichier ne sont pas en avoir l'constness pour servir les initialiseurs de tableau.Comme un exemple pour les non-constante constness, il est parfaitement ok pour déclarer
être une valeur qui est mise à jour à partir de l'extérieur du compilateur, de contrôle (pensez HW registre) et que vous n'êtes pas autorisé à céder, c'est à dire qu'il est en lecture seule.
Je ne suis pas un bon programmeur 😉 mais je le ferais:
De cette façon, c'est juste un texte de substitution. Si le compilateur encore crache le mannequin au moins, vous êtes un pas de plus pour savoir d'où le problème est.
Comme une alternative, ce serait également le travail dans ce cas:
En langage C, les objets statiques durée de stockage doit être initialisé avec des expressions constantes ou de l'agrégat des initialiseurs contenant des expressions constantes. --Réponse d'AndreyT
Après la lecture, Vous devez savoir que l'
NUM_DIMENSIONS
Si elle a leconst
-qualification, n'est-ce pas une constante! Ensuite, vous ne pouvez pas initializate votre tableau de cette façon.Pour utiliser ce code:
const int xyzOrigin[NUM_DIMENSIONS] = {X_ORIGIN, Y_ORIGIN, Z_ORIGIN};
Vous devez utiliser:
#define NUM_DIMENSIONS 3
ou vous pouvez simplement déclarer sans aucune variable à l'intérieur de crochetsconst int xyzOrigin[] = {X_ORIGIN, Y_ORIGIN, Z_ORIGIN};
Que le triclosan a dit:
cela fonctionne bien...
ou, si vous connaissez les dimensions d'avance, ce: