Ошибка C++: "массив должен быть инициализирован с помощью вложенного инициализатора скобки"
Я получаю следующую ошибку 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 ответов
синтаксис для статической инициализации массива использует фигурные скобки, например:
int array[10] = { 0 };
это приведет к нулевой инициализации массива.
для многомерных массивов вам нужны вложенные фигурные скобки, например:
int cipher[Array_size][Array_size]= { { 0 } };
отметим, что Array_size
должна быть константой времени компиляции, чтобы это работало. Если Array_size
не известно во время компиляции, необходимо использовать динамическую инициализацию. (Предпочтительно std::vector
).
вы не можете инициализировать массив до "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;
}
вы не можете инициализировать массивы такой:
int cipher[Array_size][Array_size]=0;
синтаксис для 2D массивов:
int cipher[Array_size][Array_size]={{0}};
обратите внимание на фигурные скобки в правой части оператора инициализации.
для массивов 1D:
int tomultiply[Array_size]={0};