gpt4 book ai didi

c++ - 如何在函数调用中进行模板递归?

转载 作者:搜寻专家 更新时间:2023-10-31 01:31:36 29 4
gpt4 key购买 nike

template <size_t size_x, size_t size_y>

int func(int(&grid)[size_x][size_y], int s_x, int x)
{
if (s_x == x)
return 0;
else {
cout << grid[s_x][0] << " " << x << endl;
s_x++;
return func(grid, s_x, x);
}
}

int main()
{
int T;
cin >> T;
while (T > 0) {
int M, N, x, y, s_x = 0, s_y = 0;
cin >> M >> N;
int grid[M][N] = {};
cin >> x >> y;
x--;
y--;
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
cin >> grid[i][j];
}
}
int time_r = func(grid, s_x, x);
cout << time << endl;
T--;
}
return 0;
}

我遇到的错误:

no matching function for call to ‘func(int [M][N], int&, int&)’ int time_r=func(grid,s_x,x);

note: candidate: template int func(int (&)[size_x][size_y], int, int) int func(int (&grid)[size_x][size_y],int s_x, int x)

note: template argument deduction/substitution failed:

note: variable-sized array type ‘long int’ is not a valid template argument int time_r=func(grid,s_x,x);

如何正确运行?

最佳答案

这是 C99 VLA 和 C++ 模板的奇怪组合。该模板需要一个在编译时边界已知的数组,而 VLA 仅在运行时知道其边界,因此这将不起作用。

您可以采用 C 方式并使用采用指针和两个大小的普通(非模板)func,或者您将整个代码扔掉并采用 C++ 方式,最好使用 vector 。

关于c++ - 如何在函数调用中进行模板递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45431124/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com