结构体指针作为函数参数
求助:编译器提醒14 7 D:\code\C\homework\九\1\新文件3.cpp [错误] 'void D(main()::Date*)', declared using local type 'main()::Date', is used but never defined [-fpermissive]这是为什么?
#include <stdio.h>
int main()
{
struct Date
{
int year;
int month;
int day;
}date;
struct Date *p;
p = &date;
void D(struct Date *p);
printf("请输入年 月 日:\n");
scanf("%d %d %d",p->year,p->month,p->day);
D(p);
return 0;
}
void D(struct Date *p)
{
int i,n=0;
for(i = 1;i < p->month;i++)
{
switch(i)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:n=n+31;break;
case 2:n=n+28;break;
case 4:
case 6:
case 9:
case 11:n=n+30;break;
}
}
if(p->year%4==0&&p->year%100!=0||p->year%400==0)
{
n = n+1;
}
n = n+p->day;
printf("%d年%d月%d日是%d年的第 %d 天\n",p->year,p->month,p->day,p->year,n);
} 你遇到的错误是因为你在 `main` 函数中定义的 `Date` 结构体是局部类型,这意味着它的作用范围仅限于 `main` 函数内。这导致在其他地方(如 `D` 函数)无法访问到这个结构体类型。
为了修复这个问题,可以将 `Date` 结构体的定义移到函数外部,使其成为一个全局可访问的类型,像这样:
#include <stdio.h>
struct Date
{
int year;
int month;
int day;
};
void D(struct Date *p);
int main()
{
struct Date date;
struct Date *p;
p = &date;
printf("请输入年 月 日:\n");
scanf("%d %d %d", &p->year, &p->month, &p->day);
D(p);
return 0;
}
void D(struct Date *p)
{
int i, n = 0;
for(i = 1; i < p->month; i++)
{
switch(i)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: n = n + 31; break;
case 2: n = n + 28; break;
case 4:
case 6:
case 9:
case 11: n = n + 30; break;
}
}
if((p->year % 4 == 0 && p->year % 100 != 0) || p->year % 400 == 0)
{
n = n + 1;
}
n = n + p->day;
printf("%d年%d月%d日是%d年的第 %d 天\n", p->year, p->month, p->day, p->year, n);
}
这里我还修正了 `scanf` 的用法,你需要传递变量的地址给 `scanf`。请注意对 `scanf` 参数的修改:`&p->year`, `&p->month`, `&p->day`。这样代码就能正确编译和运行了。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]