出现错误表达式必须是指向完整对象类型的指针

g1162141320 2017-05-11 09:55:56
//room.h
#include<stdio.h>
struct room
{
int roomnum;
int price;
int people;
};
void room();
extern struct room;
//room.c
#include<stdio.h>
#include"room.h"
void room()
{
struct room room[6];
int i;
for (i = 0; i < 6; i++)
{
room[i].people = 0;
room[i].price = 200;
room[i].roomnum = 100 + i;
}
FILE * fproom;
fproom = fopen("room", "wb");
for (i = 0; i < 6; i++)
{
fwrite(&room[i], sizeof(struct room), 1, fproom);
}
fclose(fproom);
}
//in.h
#include<stdio.h>
#include"room.h"
struct customer
{
char name[20];
char sex[6];
int num;
int phone;
int room;
};
void in();
//in.c
#include<stdio.h>
#include"room.h"
#include"in.h"
void in()
{
int i;
struct customer customer[6];
for (i = 0;; i++)
{
if (customer[i].name[0] == '\0')
break;
}
printf("请输入身份证号:");
scanf("%d", &customer[i].num);
printf("请输入姓名:");
scanf("%s", &customer[i].name);
printf("请输入性别:");
scanf("%d", &customer[i].phone);
printf("请输入联系方式:");
scanf("%d", &customer[i].phone);
FILE * fproom;
fproom = fopen("room", "wb");
for (i = 0; i < 6; i++)
{
fread(&room[i], sizeof(struct room), 1, fproom);
}
}
以上是部分代码,红色是出错部分,求解为什么,不懂怎么解决,刚开始接触这部分。
...全文
3872 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2017-05-13
  • 打赏
  • 举报
回复
错误原因很明显。struct room room[6]; 这个用法没错的,这个只在 room.c 里面有,room.h 和 in.h 中都没有。但是 room.h 中有一个 void room(); 而 in.c 既包含了 room.h 也包含了 in.h,对于 in.c 可见的非结构体名称的 room 就只有一个 void room(); 也就是个函数名,而你对一个函数名进行 &room[i] 这样的调用当然会报错。struct room room[6]; 对于 in.c 是不可见的。虽然说 struct room room[6]; 这个用法没错,但是尽量避免这样使用。况且在你的全部的四个文件中,有 struct room,有 room[6],有 void room()。你三个不同意义的 room,这是在迷惑编译器吧?
lxr5109 2017-05-12
  • 打赏
  • 举报
回复
换个名字试试吧?结构体类型定义也用room,变量名也用room,感觉要出问题。
自信男孩 2017-05-12
  • 打赏
  • 举报
回复
在in.c中定义一个room变量
struct room room[6];
cutmelon 2017-05-12
  • 打赏
  • 举报
回复
这个错误明显是函数in()里room这个数组没定义啊
sdghchj 2017-05-11
  • 打赏
  • 举报
回复
room有声明吗???

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧