2016-04-22 96 views
-2

我得到「數組下標錯誤的無效類型'int [int]'」。 我搜索了相同的,但以前問Q的涉及對象。這是一個簡單的片段。對於數組下標 - 多維數組無效類型'int [int]'

Code

#include<iostream> 
    #include<cmath> 
    using namespace std; 

    int main() 
{ 
int *a; 
a = new int a[10][10];  //Line 8 
    for(int z=0;z<10;z++) 
    { 
     for(int y=0;y<10;y++) 
     { 
      a[z][y]=y;     // Line 13 
      cout <<"\t"<<a[z][y]<<endl; // Line 14 
     } 
    } 
return 0; 
} 

Error

  1. 第8行錯誤:預期 ';'之前 '一'

  2. 第13行錯誤:無效類型 'INT [INT]' 的數組下標

  3. 14行錯誤:無效類型 'INT [INT]' 的數組下標
+1

http://stackoverflow.com/questions/936687/how-do-i-declare-a-2d-array-in-c-using-new – pm100

回答

3

首先,你這個沒用的a

a = new int a[10][10]; 
      ^^^ 

你的意思是隻寫new int[10][10]

其次,該固定表達式不具有類型int*。它有類型int(*)[10]。你不能分配到int*,你必須這樣做兩次:

int** a; 
a = new int*[10]; 
for (int i = 0; i < 10; ++i) { 
    a[i] = new int[10]; 
    for (int j = 0; j < 10; ++j) { 
     a[i][j] = j; 
    } 
} 

三,喜歡使用std::vector<std::vector<int>> a;它會爲您節省大量的其他問題的路線。或(如ildjarn指出)std::array<std::array<int, 10>, 10>,如果這些尺寸保持不變。

+0

爲什麼回答和關閉作爲愚蠢? – NathanOliver

+1

@NathanOliver我回答。然後我看到pm100發佈了該鏈接,認爲這是正確的鏈接並關閉了它。如果我首先看到鏈接,我會剛剛開始。 – Barry

+0

@巴里沒問題。我沒有看到評論。 – NathanOliver

2

您有一個錯字:

a = new int a[10][10];  //Line 8 
      ^~~~~ ! 

刪除這個

還你分配你的陣列是錯誤的方式,它應該是:

int **a; 
a = new int *[10];  //Line 8 
for(int i = 0; i < 10; ++i) 
    a[i] = new int[10]; 
相關問題