无效的类型' int [int]' for array下标 - 多维数组

时间:2016-04-22 19:14:18

标签: c++ arrays c++11 multidimensional-array c++14

我得到了一个"无效的类型' int [int]'对于数组下标错误"。  我搜索了相同的内容,但之前询问了Q所涉及的对象。这是一个简单的片段。

  

代码

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

错误

  1. 第8行错误:预期&#39 ;;&#39;在&#39; a&#39;

  2. 之前
  3. 第13行错误:类型无效&#39; int [int]&#39;对于数组下标

  4. 第14行错误:类型无效&#39; int [int]&#39;对于数组下标

2 个答案:

答案 0 :(得分: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>,如果这些维度保持不变。

答案 1 :(得分: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];