【问题标题】:invalid types 'int[int]' for array subscript数组下标的无效类型“int [int]”
【发布时间】:2010-09-26 16:55:14
【问题描述】:

此代码抛出标题中给出的编译错误,谁能告诉我要更改什么?

#include <iostream>

using namespace std;

int main(){

    int myArray[10][10][10];

    for (int i = 0; i <= 9; ++i){
        for (int t = 0; t <=9; ++t){            
            for (int x = 0; x <= 9; ++x){
                for (int y = 0; y <= 9; ++y){

                myArray[i][t][x][y] = i+t+x+y; //This will give each element a value

                      }
                      }
                      }
                      }

    for (int i = 0; i <= 9; ++i){
        for (int t = 0; t <=9; ++t){
            for (int x = 0; x <= 9; ++x){
                for (int y = 0; y <= 9; ++y){

                cout << myArray[i][t][x][y] << endl;

                    }
                    }
                    }                
                    }

    system("pause");

}

提前致谢

【问题讨论】:

    标签: c++ arrays compiler-errors


    【解决方案1】:

    您正在为一个三维数组myArray[10][10][10] 下标四次myArray[i][t][x][y]。您可能需要向数组添加另一个维度。还可以考虑像 Boost.MultiArray 这样的容器,尽管此时您可能无法理解。

    【讨论】:

    • 该死,我一定是在开始尝试运行之前不小心删除了该行。
    【解决方案2】:

    要改变什么?除了 3 或 4 维数组问题,您应该摆脱幻数(10 和 9)。

    const int DIM_SIZE = 10;
    int myArray[DIM_SIZE][DIM_SIZE][DIM_SIZE];
    
    for (int i = 0; i < DIM_SIZE; ++i){
        for (int t = 0; t < DIM_SIZE; ++t){            
            for (int x = 0; x < DIM_SIZE; ++x){
    

    【讨论】:

    • 以防万一将来您的手指数量不同 ;-)
    【解决方案3】:
    int myArray[10][10][10];
    

    应该是

    int myArray[10][10][10][10];
    

    【讨论】:

      【解决方案4】:

      为了完整起见,此错误也可能发生在不同的情况下:当您在外部范围内声明一个数组,但在内部范围内声明另一个具有相同名称的变量时,会隐藏数组。然后,当您尝试对数组进行索引时,实际上是在访问内部作用域中的变量,它甚至可能不是数组,也可能是维数较少的数组。

      例子:

      int a[10];  // a global scope
      
      void f(int a)   // a declared in local scope, overshadows a in global scope
      {
        printf("%d", a[0]);  // you trying to access the array a, but actually addressing local argument a
      }
      

      【讨论】:

        【解决方案5】:

        您正在尝试访问具有 4 个取消引用的 3 维数组

        你只需要 3 个循环而不是 4 个,或者int myArray[10][10][10][10];

        【讨论】:

          【解决方案6】:

          我认为您已经初始化了一个 3d 数组,但您正在尝试访问一个 4 维数组。

          【讨论】:

          • 我在给出答案时的建议是尝试指出问题中原始代码的特定部分。在您的情况下,这意味着包括 int myArray[10][10][10]; 用于 3 维数组引用和 myArray[i][t][x][y] = i+t+x+y; 用于 thr 4 维数组引用。有时,如果人们没有上下文来理解您的答案,他们会投反对票。
          猜你喜欢
          • 2012-09-07
          • 2015-09-26
          • 2013-02-12
          • 1970-01-01
          • 2021-05-04
          • 1970-01-01
          • 2022-12-09
          相关资源
          最近更新 更多