1. ホーム
  2. c++

[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"

2022-01-20 12:26:43

質問

以下のようなC++エラーが発生します。

array must be initialized with a brace enclosed initializer 

このC++の行から

int cipher[Array_size][Array_size] = 0;

ここで何が問題なのか?このエラーは何を意味しているのでしょうか?以下はコードの全文です。

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

解決方法は?

配列を静的に初期化する構文は、次のように中括弧を使用します。

int array[10] = { 0 };

これは配列をゼロ初期化します。

多次元配列の場合は、このように中括弧を入れ子にする必要があります。

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

なお Array_size はコンパイル時定数である必要があります。 もし Array_size がコンパイル時にわからない場合は、動的初期化を使用する必要があります。 (望ましいのは std::vector ).