C errore di compilazione: “oggetto Variable-sized non può essere inizializzato”
-
28-09-2019 - |
Domanda
Perché ricevo l'errore "oggetto Variable-sized non può essere inizializzato" con il seguente codice?
int boardAux[length][length] = {{0}};
Soluzione
Io parto dal presupposto che si sta utilizzando un compilatore C99 (con supporto per gli array di dimensioni in modo dinamico). Il problema nel codice è che nel momento in cui i compilatori vede la tua dichiarazione di variabile che non può sapere quanti elementi ci sono nella matrice (sto anche dando per scontato, dal errore del compilatore che length
non è una costante di tempo di compilazione).
È necessario inizializzare manualmente tale matrice:
int boardAux[length][length];
memset( boardAux, 0, length*length*sizeof(int) );
Altri suggerimenti
Si riceve questo errore perché in linguaggio C che non sono autorizzati a utilizzare inizializzatori di array di lunghezza variabile. Il messaggio di errore che si stanno ottenendo praticamente dice tutto.
6.7.8 inizializzazione
...
3 Il tipo di entità da inizializzare sarà un array di dimensione sconosciuta o un oggetto tipo che non è una lunghezza variabile tipo di matrice.
Questo dà errore:
int len;
scanf("%d",&len);
char str[len]="";
Questo dà anche l'errore:
int len=5;
char str[len]="";
Ma questo funziona bene:
int len=5;
char str[len]; //so the problem lies with assignment not declaration
Hai bisogno di mettere il valore nel seguente modo:
str[0]='a';
str[1]='b'; //like that; and not like str="ab";
Dopo dichiara la matrice
int boardAux[length][length];
il modo più semplice per assegnare i valori iniziali come zero utilizzando per ciclo, anche se può essere un po 'lungo
int i, j;
for (i = 0; i<length; i++)
{
for (j = 0; j<length; j++)
boardAux[i][j] = 0;
}
È sufficiente dichiarare la lunghezza di essere un contro, se non è la memoria, allora si dovrebbe essere l'allocazione dinamica
Per C ++ dichiarazione separata e l'inizializzazione come questo ..
int a[n][m] ;
a[n][m]= {0};
Non si può farlo. Compilatore C non può fare una cosa così complessa sulla pila.
Devi usare mucchio e l'allocazione dinamica.
Che cosa avete veramente bisogno di fare:
- dimensione di calcolo (n m sizeof (elemento)) della memoria è necessario
- chiamata malloc (dimensioni) per allocare la memoria
- creare una funzione di accesso: int * accesso (PTR, x, y, rowsize) {return PTR + y * rowsize + x; }
Usa accesso (boardAux, x, y, formato) = 42 per interagire con la matrice.