这是我的代码。我收到了错误:
形式参数1的类型不完整
在main()
内调用函数minCost的行。请帮忙!
#include<stdio.h>
#include<limits.h>
int minCost(int cost[][], int m, int n)
{
if (n < 0 || m < 0)
return INT_MAX;
else if (m == 0 && n == 0)
return cost[m][n];
else
return cost[m][n] + min(minCost(cost, m-1, n),minCost(cost, m, n-1) );
}
int min(int y, int z)
{
if (y < z)
return y;
else
return z;
}
int main()
{
int test_case,m,n,pos_m,pos_n;
int cost[20][20];
scanf("%d",test_case);
scanf("%d%d",m,n);
scanf("%d%d",pos_m,pos_n);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
scanf("%d",cost[i][j]);
printf("%d",minCost(cost, pos_m, pos_n));
return 0;
}
答案 0 :(得分:3)
传递参数时,例如在此语句中:
int minCost(int cost[][], int m, int n)
&#39;费用[] []&#39;第二个索引必须包含元素的数量。否则编译器不知道在第一个索引递增/递减时改变偏移量。建议:
int minCost(int cost[][20], int m, int n)
答案 1 :(得分:2)
具有2D数组参数的函数的推荐语法是
int minCost(size_t m, size_t n, int cost[m][n]);
因此,您不必保留任何不完整的维度。 (并且m
和n
必须在列表中的cost
之前。)
这对你的函数不起作用,因为对于你的一个递归调用,你试着减少矩阵的列数。没有编译器魔法可以做到这一点。