2010-12-01 17 views
12

Aşağıdaki C++ hatasını alıyorum:C++ hatası: "Array, brace kapalı başlatıcı ile başlatılmalıdır"

array must be initialized with a brace enclosed initializer 

Bu satır C++

int cipher[Array_size][Array_size]; 

Burada sorun nedir? Hata ne anlama geliyor? Tam kod aşağıdadır:

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

cevap

15

sözdizimi statik bir dizi başlatmak için, bu gibi küme parantezi kullanır:

int array[10] = { 0 }; 

Bu dizi sıfır-başlatılır.

çok boyutlu diziler için

, böyle, iç içe küme parantezi gerekir:

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

Not Array_size bu çalışması için sabit bir derleme zamanı olmalıdır. Derleme zamanında Array_size bilinmiyorsa, dinamik başlatma kullanmalısınız. (Tercihen, bir std::vector).

Sen bunu böyle beyan gibi dizideki tüm değerleri başlatabilir ya bu

int cipher[Array_size][Array_size]=0; 

gibi '0'a bir diziyi başlatmak olamaz

0

:

int cipher[Array_size][Array_size]=0; 

2D diziler sözdizimi şöyledir:

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

Not sağda küme parantezleri Aşağıda tam koddur başlatma ifadesinin el tarafı. 1D diziler için

:

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

Yoksa gerekir beyan sonrası değerleri başlat. Örneğin 0'a tüm değerleri başlatmak istiyorsanız, aşağıdaki gibi bir şey yapabilirsiniz:

for (int i = 0; i < Array_size; i++) { 
    a[i] = 0; 
} 
+0

'a [3] = {1} int a; tüm üyeler için' başlatmak olmaz aynı değeri. Sadece ilk eleman 1, kalan 0 olacaktır. – RainingChain