Un tableau lié doit être une expression constante intégrale . Pour être un intégrale expression constante une expression ne doit impliquer (parmi quelques autres) littéraux, enum
valeurs et const
variables ou static
membres de données que si elles sont initialisés avec -expressions constantes.
const
Les variables de type entier ne sont pas les expressions constantes entières si elles n'ont pas d'initialiseur.
C'est une règle de langage qui permet à l'implémentation de connaître certaines valeurs constantes au moment de la compilation sans connaître d'autres unités de traduction (qui ne peuvent pas être compilées en même temps et qui peuvent être modifiées indépendamment).
const
Les variables de l'étendue d'espace de noms ont une liaison interne par défaut (c'est-à-dire sans un extern
explicite), donc vous ne rencontrerez aucun problème de définition multiple si vous faites quelque chose comme ceci.
// header.h
const int a = 10;
.
// source.cpp
int anarray[a];
#defines doivent être évités, en fonction de la séquence dans laquelle les en-têtes sont inclus, vous pourriez changer quelque chose involontairement. – ThomasW