C++错误:"必须使用大括号括起初始化程序初始化数组"

19 c++ arrays compiler-errors

我收到以下C++错误:

array must be initialized with a brace enclosed initializer 
Run Code Online (Sandbox Code Playgroud)

从这一系列的C++

int cipher[Array_size][Array_size];
Run Code Online (Sandbox Code Playgroud)

这里有什么问题?错误是什么意思?以下是完整代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

Cha*_*via 23

静态初始化数组的语法使用花括号,如下所示:

int array[10] = { 0 };
Run Code Online (Sandbox Code Playgroud)

这将零初始化数组.

对于多维数组,您需要嵌套的花括号,如下所示:

int cipher[Array_size][Array_size]= { { 0 } };
Run Code Online (Sandbox Code Playgroud)

请注意,Array_size必须是编译时常量才能使其正常工作.如果Array_size在编译时未知,则必须使用动态初始化.(优选地,a std::vector).

  • 您可以仅使用一组大括号(何时可以省略大括号有复杂的规则),但使用嵌套大括号更清晰。 (2认同)

Mah*_*ive 5

您不能像那样将数组初始化为“0”

int cipher[Array_size][Array_size]=0;
Run Code Online (Sandbox Code Playgroud)

您可以在声明数组时初始化数组中的所有值,如下所示:

// 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 } };
Run Code Online (Sandbox Code Playgroud)

或者您需要在声明后初始化值。例如,如果要将所有值初始化为 0,则可以执行以下操作:

for (int i = 0; i < Array_size; i++ ) {
    a[i] = 0;
}
Run Code Online (Sandbox Code Playgroud)