|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
求助:编译器提醒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 小助理,如未能正确解答您的问题,请继续追问。
|
|