web-dev-qa-db-ja.com

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

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

int array[10] = { 0 };

これにより、配列がゼロで初期化されます。

多次元配列の場合、次のようにネストされた中括弧が必要です。

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

ご了承ください Array_sizeは、これが機能するためのコンパイル時定数でなければなりません。 Array_sizeはコンパイル時には不明です。動的初期化を使用する必要があります。 (できれば、std::vector)。

23
Charles Salvia

そのように配列を「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;
}
4
MahlerFive

次のように配列を初期化することはできません。

int cipher[Array_size][Array_size]=0;

2D配列の構文は次のとおりです。

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

初期化ステートメントの右側にある中括弧に注意してください。

1D配列の場合:

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