【问题标题】:C++ error: "Array must be initialized with a brace enclosed initializer"C++ 错误:“数组必须用大括号括起来的初始化程序初始化”
【发布时间】:2011-05-18 18:39:20
【问题描述】:

我收到以下 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;
}

【问题讨论】:

    标签: c++ arrays compiler-errors


    【解决方案1】:

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

    int array[10] = { 0 };
    

    这将对数组进行零初始化。

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

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

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

    【讨论】:

    • 你可以只使用一组大括号(大括号可以省略有复杂的规则),但使用嵌套大括号更清楚。
    • 另外0 是多余的
    【解决方案2】:

    您不能像那样将数组初始化为“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 a[3] = {1}; 不会为所有成员初始化相同的值。只有第一个元素为 1,其余为 0。
    【解决方案3】:

    你不能像这样初始化数组:

    int cipher[Array_size][Array_size]=0;
    

    二维数组的语法是:

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

    注意初始化语句右侧的花括号。

    对于一维数组:

    int tomultiply[Array_size]={0};
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 2016-04-14
      相关资源
      最近更新 更多