C++ C++;二维数组位置/参数错误
我试图创建一个包含3个参数的函数(其中一个参数在该函数和main之间传输数组,一个整数表示数组第一个索引的长度,一个整数表示数组第二个索引的长度)。然后,用户可以自己设置数组的长度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 &
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
,从不在函数中使用它,并且不能期望在返回时更改它。