C ++ 2D数组位置/参数错误

时间:2015-11-18 22:40:54

标签: c++ pointers dynamic multidimensional-array

我正在尝试创建一个带3个参数的函数(一个是在此函数和main之间传输数组,一个是数组第一个索引长度的整数,另一个是数组第二个索引长度的整数)。然后在main中,用户可以自己设置数组的长度。

void function (int** x, int length1, int length2)
{     
    int** x = new int*[length1];    //error redefinition of formal parameter x
    for (int i = 0; i < length1; ++i){
    x[i] = new int[length2];
}   
    // given loop to be used after 2d array is allocated
    for (int i =0; i <length1;i++)
       for(int j =0; j<length2; j++)
       x[length1][length2] = i*j;
}

int main()
{   
int **y, s1, s2;

cout << "Enter the rows and columns: ";
cin >> s1 >> s2;
cout << endl;

function(y, s1, s2);
for(int i =0; i<s1; i++)
    for(int j=0; j<s2;j++)
        cout<<"i = " << i << " j = " << j << "y[i][j] = " <<y[i][j] << endl;

delete []y;
}

我得到关于重新定义形式参数x的错误。我读过的所有东西似乎都说我已经正确分配了2D数组,所以它是不正确传递的参数吗?我试过移动一些东西,但它没有帮助;任何帮助或方向表示赞赏。感谢

编辑:如果我将参数更改为(int **,int length1,int length2)它修复了我上面描述的问题,但现在告诉我在main函数中的y是未识别的。我需要在main中分配新数组吗?我想如果我调用了foo函数,就会处理它。

1 个答案:

答案 0 :(得分:0)

您不允许在同一范围内拥有两个具有相同名称的不同变量。但根据您的描述,您不应该有两个不同的变量。您想要更新参数x,而不是创建一个新的无关变量。

解决此问题的一种方法是:

void function (int** & x, int length1, int length2)
//                  ^^^ modify the variable in the calling function, instead of making a copy
{     
    x = new int*[length1]; 
    // rest the same
然而,整个事情的编码风格极差;你应该使用容器类而不是一系列new个调用。