C++ C++;二维数组位置/参数错误

C++ C++;二维数组位置/参数错误,c++,pointers,dynamic,multidimensional-array,C++,Pointers,Dynamic,Multidimensional Array,我试图创建一个包含3个参数的函数(其中一个参数在该函数和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 &

我试图创建一个包含3个参数的函数(其中一个参数在该函数和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;
}
void函数(int**x,int length1,int length2)
{     
int**x=new int*[length1];//重新定义形式参数x时出错
对于(int i=0;is2;

cout不允许在同一范围内有两个同名的不同变量。但是根据您的描述,您不应该有两个不同的变量。您希望更新参数
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

但是,整个过程的编码风格非常糟糕;您应该使用容器类,而不是一系列的
新调用。

要消除错误,请删除
int**
,但您的函数不会返回您分配的内存。“形式参数x”与void函数()中的自动变量x同名…编译器抱怨的冲突是在同一范围内有两个同名的变量。是的,我从参数中取出了x,它修复了该错误,但它使我找到了另一个主要的变量,我将其放入了编辑器中省去了麻烦,并为2D数组创建了一个包装类,用于处理分配、重新调整大小和销毁操作逻辑。另一种方法是使用大量重复的代码逐个管理簿记。使用一个没有名称的参数(
(int**,
)几乎肯定是一个坏主意。您传入数组
y
,从不在函数中使用它,并且不能期望在返回时更改它。