8

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

#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");

}

提前致谢

4

6 回答 6

17

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

于 2008-12-12T19:28:15.560 回答
6

要改变什么?除了 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){
于 2008-12-12T20:00:41.657 回答
3
int myArray[10][10][10];

应该

int myArray[10][10][10][10];
于 2008-12-12T19:30:05.947 回答
3

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

例子:

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
}
于 2020-01-27T02:42:10.653 回答
2

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

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

于 2008-12-12T19:28:32.097 回答
1

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

于 2018-02-04T17:25:41.657 回答