2012-06-12 2 views
6

J'ai essayé la ligne suivante:
static const const char* values[];
mais je reçois l'avertissement suivant sur le C4114 d'avertissement de VC: même qualification de type utilisé plus d'une fois.
Quelle est la déclaration correcte?

modifier:
L'objectif est de créer un tableau immuable de chaînes cComment créer un tableau const statique de const char *

+0

Que voulez-vous créer? Un tableau de pointeurs constants aux caractères constants? –

Répondre

13

Vous avez écrit const const au lieu de static const char* const values[]; (où vous définissez le pointeur et les valeurs sous-jacentes comme const)

En outre, vous devez l'initialiser:

static const char* const values[] = {"string one", "string two"};

+0

+1, mais, l'initialisation dépend du contexte, si c'est un membre 'static' d'une classe (ma conjecture), puis aucune initialisation peut être fait dans la déclaration ... –

+0

Est-ce que je comprends bien, le premier const est pour la chaîne et le second pour le tableau? – Tommy

+7

Pour clarifier le mot clé 'const': Un' const' est toujours lié à l '"item" qui lui est laissé. L'exception de ceci est, quand const est le premier mot dans l'expression, alors il se rapporte à l'article juste à lui. Donc, pour être super-correct, on définirait la chaîne comme 'char statique const * const values ​​[]', qui peut être lu de droite à gauche: values ​​est un tableau de pointeurs const sur const chars et tout cela est statique. – AquilaRapax

4

Essayez

static const char* const values[]; 

L'idée est de mettre les deux const s de chaque côté de *: la gauche appartient à char (caractère constant), le droit appartient à char* (pointeur constant à caractère)

+2

En aparté, c'est la même chose que 'static char const const * const values ​​[]' – Dennis

Questions connexes