Ошибка C ++: «Массив должен быть инициализирован инициализатором в скобках» - PullRequest
18 голосов
/ 02 декабря 2010

Я получаю следующую ошибку C ++:

array must be initialized with a brace enclosed initializer 

Из этой строки C ++

int cipher[Array_size][Array_size];

В чем здесь проблема? Что означает ошибка? Ниже приведен полный код:

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;
}

Ответы [ 3 ]

23 голосов
/ 02 декабря 2010

Синтаксис для статической инициализации массива использует фигурные скобки, например:

int array[10] = { 0 };

Это инициализирует массив с нуля.

Для многомерных массивов вам нужны вложенные фигурные скобки, например:

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

Обратите внимание, что Array_size должна быть константой времени компиляции, чтобы это работало. Если Array_size не известен во время компиляции, вы должны использовать динамическую инициализацию. (Предпочтительно, std::vector).

4 голосов
/ 02 декабря 2010

Вы не можете инициализировать массив в '0', как этот

int cipher[Array_size][Array_size]=0;

Вы можете либо инициализировать все значения в массиве, как вы объявили это так:

// 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 } };

Иливам нужно инициализировать значения после объявления.Если вы хотите инициализировать все значения, например, 0, вы можете сделать что-то вроде:

for (int i = 0; i < Array_size; i++ ) {
    a[i] = 0;
}
0 голосов
/ 02 декабря 2010

Вы не можете инициализировать массивы следующим образом:

int cipher[Array_size][Array_size]=0;

Синтаксис для 2D-массивов:

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

Обратите внимание на фигурные скобки в правой части оператора инициализации.

для одномерных массивов:

int tomultiply[Array_size]={0};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...