web-dev-qa-db-fra.com

Erreur C ++: «Le tableau doit être initialisé avec un initialiseur placé entre accolades»

J'obtiens l'erreur C++ suivante:

array must be initialized with a brace enclosed initializer 

De cette ligne de C++

int cipher[Array_size][Array_size];

Quel est le problème ici? Que signifie l'erreur? Voici 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;
}
18
user520621

La syntaxe pour initialiser statiquement un tableau utilise des accolades, comme ceci:

int array[10] = { 0 };

Cela initialisera le tableau à zéro.

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).

23
Charles Salvia

Vous ne pouvez pas initialiser un tableau à '0' comme ça

int cipher[Array_size][Array_size]=0;

Vous pouvez soit initialiser toutes les valeurs du tableau lorsque vous le 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;
}
4
MahlerFive

Vous ne pouvez pas initialiser des tableaux comme celui-ci:

int cipher[Array_size][Array_size]=0;

La syntaxe des tableaux 2D est la suivante:

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

Notez les accolades sur le côté droit de l'instruction d'initialisation.

pour les matrices 1D:

int tomultiply[Array_size]={0};
0
Nathan Fellman