demasiados inicializadores para ‘int ‘ c ++

Primero:

int k[] ={1,2,3,4,5}; 

Segundo:

 struct slk { int k[] ={1,2,3,4,5}; }; 

para esas dos declaraciones, ¿por qué la primera pasa la comstackción, pero la segunda me da

error: demasiados inicializadores para ‘int [0]’. la comstackción pasaría si configuro k [5];

¿Qué significa este mensaje de error? Nota: código probado en GNU GCC versión 4.7.2

En C ++ 11, los inicializadores de miembros en clase están permitidos, pero básicamente funcionan igual que la inicialización en una lista de inicialización de miembros. Por lo tanto, el tamaño de la matriz debe establecerse explícitamente.

Stroustrup tiene una breve explicación en su sitio web aquí .

El mensaje de error significa que está proporcionando demasiados elementos para una matriz de longitud 0, que es lo que int [] evalúa en ese contexto.

En el primer ejemplo, algo (asignación real de memoria) está realmente sucediendo. La computadora cuenta fácilmente la cantidad de elementos que se le asignan y la usa como capacidad. En el segundo uso, como parte de una estructura, la matriz es simplemente parte de la plantilla de una estructura. En el segundo caso, un tamaño debe darse explícitamente y conocerse en tiempo de comstackción. No hay conteo automático aquí. Es similar a las declaraciones de funciones versus las definiciones, así como las declaraciones de variables (indica el tipo, pero la memoria no se modifica) y su invocación / uso (donde actúa el progtwig).

Probablemente causa en una struct el comstackdor necesita que especifiques el tamaño de forma explícita.

C inicializar matriz dentro de la estructura (juego de palabras intencionado)

Estos son dos contextos completamente diferentes:

El primero es una statement de variable (con una cláusula initialiser).

El segundo es una definición de tipo.