候选函数不可行:第一个参数没有从 'int [8][3]' 到 'int **' 的已知转换



我需要在函数中使用数组,但是每次当我运行程序时我都会得到错误。

我试图使一个小渲染程序,我试图使它使用数组。经过多次尝试,我仍然无法修复它,你能帮助我,给我一些建议,如:我如何避免它,或修复它。

这不是程序代码,只是一个例子。

#include <iostream>
void func_W(int*arr[])
{
for(int i = 0; i < 8; i++){
for(int j = 0; j < 3; j++){
std::cout << arr[i][j];
arr[i][j] = 1;
std::cout << arr[i][j];
};
};
};
int main()
{
int arr1[8][3];
func_W(arr1);
}

像任何其他数组一样,arr1将衰变为指向其第一个元素的指针。问题是arr1的元素依次是数组,而这些元素不会衰减。

因此,arr1将衰变为&arr1[0],其类型为int (*)[3]。这是参数需要的类型:

void func_W(int (*arr)[3])

或者使用std::array,它是数组的包装器,但增加了类似容器的功能:

// Define an alias for an 8x3 "2D" array
using array_type = std::array<std::array<int, 3>, 8>;
// ...
void func_W(array_type& arr)
{
for (auto& inner_arr : arr)
{
for (auto& ref : inner_arr)
{
ref = 1;
}
}
}
int main()
{
array_type arr1;
func_W(arr1);
}

相关内容

最新更新