C 函数错误:double[]到double?

C 函数错误:double[]到double?,c,compiler-errors,C,Compiler Errors,我的作业有点问题。我花了最后一个小时想弄明白。我个人没有看到任何语法错误 这就是错误所在 错误1错误C2440:“函数”:无法从“double[49]”转换为“double” 这条线指的是: std_report(student_id, upexp_m, upexp_y, upinc_m, upinc_y, num); 声明如下: int student_id[MAX]; double upexp_m[MAX], upexp_y[MAX], upinc_m[MAX], upinc_y[MAX]

我的作业有点问题。我花了最后一个小时想弄明白。我个人没有看到任何语法错误

这就是错误所在

错误1错误C2440:“函数”:无法从“double[49]”转换为“double”

这条线指的是:

std_report(student_id, upexp_m, upexp_y, upinc_m, upinc_y, num);
声明如下:

int student_id[MAX];
double upexp_m[MAX], upexp_y[MAX], upinc_m[MAX], upinc_y[MAX];

void std_report(int student_id[], double exp_m[], double exp_[], double income_m, double income_y, int size);
以及实施:

void std_report(int student_id[], double exp_m[], double exp_y[], double income_m[], double income_y[], int size) {
  printf("\n\n<STUDENT NAME> Budget Report (Student ID:%d\n", student_id[size]);
  printf("~~~~~~~~~~~~~~~~~~~~~\n");
  printf("Expenses\n~~~~~~~~\n\n");
  printf("%45c MONTHLY %6c ANNUALLY\n", ' ', ' ');
  printf("Total Expenses: %28c $ %.2lf %5c $ %.2lf\n", ' ', exp_m[size], ' ', exp_y[size]);
  printf("Total Income: %30c $ %.2lf %5c $ %.2lf\n", ' ',income_m[size], ' ',income_y[size]);
  printf("Total Savings Available for your goals: %4c $ %.2lf %6c $ %.2lf\n\n\n", ' ', income_m[size]-exp_m[size], ' ', income_y[size]-exp_y[size]);
  return;
}
void std_report(国际学生id[],双经验m[],双经验y[],双收入m[],双收入y[],国际规模){
printf(“\n\n预算报告(学生ID:%d\n”,学生ID[大小]);
printf(“~~~~~~~~~~~~~~~~~~~~~~\n”);
printf(“费用\n~~~~~~~~\n\n”);
printf(“%45摄氏度每月%6摄氏度每年”;
printf(“总费用:%28c$%.2lf%5c$%.2lf\n”,“”,exp_m[size],“”,exp_y[size]);
printf(“总收入:%30c$%.2lf%5c$%.2lf\n”,”,收入[大小],”,收入[大小];
printf(“可用于您的目标的总节省量:%4c$%.2lf%6c$%.2lf\n\n”、“”、收入[size]-exp\m[size]、“”、收入[size]-exp\y[size]);
返回;
}
如果还有什么我可以粘贴的,请告诉我,我完全被难住了。任何帮助都将不胜感激

解决方案
原型中缺少了一个
[]

一种分析方法来解决这个问题:看看错误,它清楚地表明您的编译器正在尝试将一个由
double
s(
double[49]
)组成的数组转换为一个普通的
double

如果我们查看您的
std_report
函数,您使用的是带有数组下标的所有相关变量,因此错误不可能存在,您的编译器还指示错误发生在调用
std_report
的行中。由于作为参数传递的变量具有正确的类型,因此编译器必须取消r假设其中一个参数具有不同的类型


因此,我们必须检查向编译器传达
std_report
所需参数列表的所有点,这是实现和所有声明

让我们看看student_id、upexp_m、upexp_y、upinc_m和upinc_yCan的声明,如果你只需要使用数组中的一个值,没有必要让函数接受整个数组。只需要让它接受一个值。哦,如果num==数组的长度,那么arr[size]无效。arr[size-1]是最后一次有效访问。您是否已在独立于实现的某个位置声明了
std_report
?可能您忘记了
[]
在那里?我认为@bitmask已经解决了这个问题。你还可以添加std_report的声明吗?你也可以创建参数指针,因为数组无论如何都会衰减。实际上,实现是不相关的。唯一重要的是调用点在范围内的原型。@JimBalter:你可能没有显式的d如果函数是编译单元的本地函数,那么系统地检查实现给出的声明。这就是我将其包括在内的原因。在这种情况下,您是对的,因为我们可以从OP确定实现的参数列表是正确的。我不知道我添加了[]对于丢失的原型,它现在可以正常工作了……同样,实现是不相关的……编译器错误基于范围内的原型,显式或隐式地,
int std_report()
。实现唯一相关的时间是在调用之前,在同一文件中发生in,因此充当原型。@crashez:Great:)我刚刚添加了一个正确的答案,总结了解决方案,并提供了解决此类错误的蓝图。如果你认为你的问题就这样解决了,你可以接受一个答案来表明这一点。