我知道simillar问题多次出现,但我仍然无法找到这种情况。我想拥有能够为进一步操作创建数组的功能。
in main:
int *field;
new_field(&field);
void new_field(int **field){
int **field = new int*[max_height];
for (int i = 0; i < max_width; ++i)
field[i] = new int[max_width];
}
“重新定义形式参数'字段'”出现,但我也尝试了其他指针选项:/
答案 0 :(得分:0)
问题是您正在重新定义field
函数中的new_field
变量。只需删除重新定义。这是int** field = ...
函数中field = ...
的更改new_field
。
#define max_height 10
#define max_width 10
void new_field(int **field){
field = new int*[max_height];
for (int i = 0; i < max_width; ++i)
field[i] = new int[max_width];
}
int main(){
int *field;
new_field(&field);
}
答案 1 :(得分:0)
对于初学者,变量字段的类型应为int **
。
在函数内部重新声明name字段,编译器报告此
void new_field(int **field){
int **field = new int*[max_height];
//...
在循环中,您必须使用max_height
而不是max_width
for (int i = 0; i < max_height; ++i)
您可以使用引用的类型作为参数。例如
int **field;
new_field( field );
//...
void new_field(int ** &field ){
field = new int*[max_height];
for (int i = 0; i < max_height; ++i)
field[i] = new int[max_width];
}
但实际上该函数会分配几个一维数组。
如果变量max_width
是编译时常量,那么确实可以分配一个二维数组。例如
int ( *field }[max_width];
new_field( field );
//...
void new_field(int ( * &field )[max_width] ){
field = new int[max_height][max_width];
}