2010-12-01 8 views
12

Je reçois l'erreur C++ suivant:C++ erreur: "Array doit être initialisé avec un initialiseur joint brace"

array must be initialized with a brace enclosed initializer 

A partir de cette ligne de C++

int cipher[Array_size][Array_size]; 

Quel est le problème ici? Que signifie l'erreur? Ci-dessous le code complet:

string decryption(string todecrypt) 
{ 
    int cipher[Array_size][Array_size] = 0; 
    string ciphercode = todecrypt.substr(0,3); 
    todecrypt.erase(0,3); 
    decodecipher(ciphercode,cipher); 
    string decrypted = ""; 
    while(todecrypt.length()>0) 
    { 
     string unit_decrypt = todecrypt.substr(0,Array_size); 
     todecrypt.erase(0,Array_size); 
     int tomultiply[Array_size]=0; 
     for(int i = 0; i < Array_size; i++) 
     { 
      tomultiply[i] = int(unit_encrypt.substr(0,1)); 
      unit_encrypt.erase(0,1); 
     } 
     for(int i = 0; i < Array_size; i++) 
     { 
      int resultchar = 0; 
      for(int j = 0; j<Array_size; j++) 
      { 
       resultchar += tomultiply[j]*cipher[i][j]; 
      } 
      decrypted += char((resultchar%229)-26); 
     } 
    } 
    return decrypted; 
} 

Répondre

15

La syntaxe pour initialiser statiquement une matrice utilise des accolades, comme ceci:

int array[10] = { 0 }; 

Cela zéro initialiser le tableau.

Pour les tableaux multidimensionnels, vous avez besoin d'accolades imbriquées, comme ceci:

int cipher[Array_size][Array_size]= { { 0 } }; 

Notez que Array_size doit être une constante de compilation pour que cela fonctionne. Si Array_size n'est pas connu au moment de la compilation, vous devez utiliser l'initialisation dynamique. (De préférence, un std::vector).

0

Vous ne pouvez pas initialiser des tableaux comme ceci:

int cipher[Array_size][Array_size]=0; 

La syntaxe pour les tableaux 2D est:

int cipher[Array_size][Array_size]={{0}}; 

Notez les accolades à droite côté de la déclaration d'initialisation.

pour tableaux 1D:

int tomultiply[Array_size]={0}; 
4

Vous ne pouvez pas initialiser un tableau à « 0 » comme

int cipher[Array_size][Array_size]=0; 

Vous pouvez initialiser toutes les valeurs dans le tableau que vous déclarez comme ceci:

// When using different values 
int a[3] = {10,20,30}; 

// When using the same value for all members 
int a[3] = {0}; 

// When using same value for all members in a 2D array 
int a[Array_size][Array_size] = { { 0 } }; 

Ou vous devez initialiser les valeurs après la déclaration. Si vous voulez initialiser toutes les valeurs à 0 par exemple, vous pouvez faire quelque chose comme:

for (int i = 0; i < Array_size; i++) { 
    a[i] = 0; 
} 
+0

'int a [3] = {1};' n'initialisera pas la même valeur pour tous les membres. Seul le premier élément sera 1, le reste sera 0. – RainingChain