2010-12-01 8 views
12

Tôi nhận được C++ lỗi sau:C++ lỗi: "Dãy phải được khởi tạo với một cú đúp initializer kèm"

array must be initialized with a brace enclosed initializer 

Từ dòng này của C++

int cipher[Array_size][Array_size]; 

vấn đề là gì đây? Lỗi này có nghĩa là gì? Dưới đây là đoạn code đầy đủ:

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

Trả lời

15

Cú pháp để tĩnh khởi tạo một mảng sử dụng dấu ngoặc nhọn, như thế này:

int array[10] = { 0 }; 

này sẽ zero-khởi tạo mảng.

Đối với mảng đa chiều, bạn cần dấu ngoặc nhọn lồng nhau, như thế này:

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

Lưu ý rằng Array_size phải là một thời gian biên dịch liên tục để làm việc này. Nếu Array_size không được biết tại thời gian biên dịch, bạn phải sử dụng khởi tạo động. (Tốt hơn là, std::vector).

0

Bạn không thể khởi tạo mảng như thế này:

int cipher[Array_size][Array_size]=0; 

Cú pháp cho mảng 2D là:

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

Lưu ý các dấu ngoặc nhọn ở bên phải Mặt bên của câu lệnh khởi tạo.

cho mảng 1D:

int tomultiply[Array_size]={0}; 
4

Bạn không thể khởi tạo một mảng để '0' như thế

int cipher[Array_size][Array_size]=0; 

Bạn có thể khởi tạo tất cả các giá trị trong mảng như bạn khai báo nó như thế này:

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

Hoặc bạn cần khởi tạo các giá trị sau khi khai báo. Nếu bạn muốn khởi tạo tất cả các giá trị 0 Ví dụ, bạn có thể làm một cái gì đó như:

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

'int a [3] = {1}; 'sẽ không khởi tạo giá trị như nhau cho tất cả các thành viên. Chỉ phần tử đầu tiên sẽ là 1, phần còn lại sẽ là 0. – RainingChain