C++错误:"数组必须用括号包围的初始化器进行初始化"

28

我遇到了以下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;
}
3个回答

35

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

int array[10] = { 0 };
这将对数组进行零初始化。
对于多维数组,您需要嵌套花括号,如下所示:
int cipher[Array_size][Array_size]= { { 0 } };

请注意,为使此方法生效,Array_size 必须是编译时常量。如果在编译时无法确定 Array_size ,则必须使用动态初始化(最好使用 std::vector )。


2
你可以只使用一组花括号(有复杂的规则来确定何时可以省略花括号),但是使用嵌套的花括号更清晰。 - Keith Thompson
同时,0 是多余的。 - M.M

6

你不能像那样将数组初始化为'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;
}

1
“int a[3] = {1};” 不会为所有成员初始化相同的值。只有第一个元素是1,其余都是0。 - RainingChain

0

你不能这样初始化数组:

int cipher[Array_size][Array_size]=0;

二维数组的语法是:

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

请注意初始化语句右侧的花括号。
对于一维数组:
int tomultiply[Array_size]={0};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接