2012-06-12 25 views
6

Probé la siguiente línea:
static const const char* values[];
pero me da la siguiente advertencia en VC++ C4114 advertencia: mismo tipo de clasificación utilizado más de una vez.
¿Cuál es la declaración correcta?

edición:
El objetivo es crear un conjunto inmutable de cadenas de CCómo crear una matriz de static const const char *

+0

¿Qué desea crear? ¿Una matriz de punteros constantes para caracteres constantes? –

Respuesta

13

Usted escribió const const en lugar de static const char* const values[]; (donde se define el puntero y los valores subyacentes como const)

Además, es necesario inicializarlo:

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

+0

+1, Pero, la inicialización depende del contexto, si es un miembro 'estático' de una clase (mi suposición) entonces no hay inicialización se puede hacer en la declaración ... –

+0

¿Lo entiendo correctamente, el primer const es para la cadena y el segundo para la matriz? – Tommy

+7

Para aclarar la palabra clave 'const': Un' const' siempre está relacionado con el "elemento" que le queda. La excepción de esto es que cuando const es la primera palabra en la expresión, entonces se relaciona con el ítem derecho a ella. Entonces, para ser supercorrecto, uno definiría la cadena como 'static const * const values ​​[]', que se puede leer de derecha a izquierda: values ​​es una matriz de const punteros para const chars y todo esto es estático. – AquilaRapax

4

Trate

static const char* const values[]; 

La idea es poner los dos const s a ambos lados de *: la izquierda pertenece a char (carácter constante), el derecho pertenece a char* (puntero constante a carácter)

+2

Como un aparte, esto es lo mismo que 'static const * const valores const []' – Dennis