2010-12-01 15 views
12

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

答えて

15

静的アレイは次のように、中括弧を使用して初期化するための構文:

int array[10] = { 0 }; 

これはゼロ初期化する配列。多次元配列の場合

、あなたはこのような入れ子の中括弧、必要があります。Array_sizeこれが機能するためには、コンパイル時定数でなければならないことを

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

注意を。コンパイル時にArray_sizeがわからない場合は、動的初期化を使用する必要があります。 (好ましくはstd::vector)。

あなたはこのようにそれを宣言するようあなたは、アレイ内のすべての値を初期化するか、その

int cipher[Array_size][Array_size]=0; 

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

0

int cipher[Array_size][Array_size]=0; 

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

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

注右の中括弧の下に完全なコードです初期化ステートメントの手元側。 1Dアレイの

int tomultiply[Array_size]={0}; 
4

// 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; 
} 
+0

int [3] = {1};はすべてのメンバーで同じ値を初期化しません。最初の要素だけが1になり、残りの要素は0になります。 – RainingChain

関連する問題