如何在C中修复“形式参数1的类型不完整”

时间:2017-07-31 18:46:19

标签: c

这是我的代码。我收到了错误:

  

形式参数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;
}

2 个答案:

答案 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]);
因此,您不必保留任何不完整的维度。 (并且mn必须在列表中的cost之前。)

这对你的函数不起作用,因为对于你的一个递归调用,你试着减少矩阵的列数。没有编译器魔法可以做到这一点。