,传数组给函数为啥不行,应该没错

求助,传数组给函数为啥不行,应该没错啊
# include<stdio.h>
void print(int num, infor p[]);
int m = 0;
struct grade_
{
float math;
float english;
float phisics;
};
typedef struct information
{
long id;
char name[9];
grade_ grade;
} infor;
void main()
{
int n,num;//num为班级人数
infor stu[30];
printf("****** ********************welcome to system!**********************************");
printf("\nplease input the number of students:");
scanf_s("%d", &num);
printf("1.Append record\n2.Caculate total and average score of every course\n3.Caculate total and average score of every student\n4.Sort in descending order by total score of every student\n");
printf("5.Sort in ascending order by total score of every student\n5.Sort in ascending order by total score of every student\n6.Sort in ascending order by name\n7.Sort in dictionary order by name\n");
printf("8.Search by nimber\n9.Search by name\n10.Statistic analysis for everty courst\n11.List record\n0.Exit\n");
printf("chance a item:");
scanf_s("%d", &n);
switch (n)
{
case 1:
print(num,stu);
break;
case 2:
}
}
void print(int num,infor stu[])
{
int n = 1;
printf("please input the data(for example:id  name  grade_math  grade_english  grade_physics)");
for (; num > 0; num--,n++)
{
printf("student 1:");
scanf("%d", stu[n-1].id);
getchar();
gets(stu[n-1].name);
scanf_s("%f%f%f", &stu[n - 1].grade.math, &stu[n - 1].grade.english, &stu[n - 1].grade.phisics);
}
}

,传数组给函数为啥不行,应该没错
32行print(num,stu)提示有多个重载函数“print”实例与参数列表匹配,请问一下哪里错了

------解决方案--------------------
你声明print的时候,编译器根本就不认识你infor是什么玩意。