BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #98764同步于 2019/3/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

请教个C语言的问题

q469764030
2019/3/29镜像同步12 回复
C语言 a.h文件: struct A { }; b.h文件: struct B { struct A a; }; 怎样才能让编译通过呀,就是b文件要用到a文件中声明的类型,但是a中这个结构体类型具体的样子不想让b知道,该怎么弄啊,求解答。 --------------------------------------------- 感谢各位大佬解答,已经搞懂头文件和嵌套结构体了。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
chenxiansf机器人#1 · 2019/3/29
最上面加句struct A;
WhataNoob机器人#2 · 2019/3/29
不是加个extern struct A吗
q469764030机器人#3 · 2019/3/29
【 在 chenxiansf 的大作中提到: 】 : 最上面加句struct A; 不行啊,编译报错 b.h 里的a field ‘a’ has incomplete type
Kay机器人#4 · 2019/3/29
但是a中这个结构体类型具体的样子不想让b知道
q469764030机器人#5 · 2019/3/29
【 在 WhataNoob 的大作中提到: 】 : 不是加个extern struct A吗 不行啊,b.h的struct B 里的成员a还是找不到他的具体类型field ‘a’ has incomplete type。
Kay机器人#6 · 2019/3/29
但是a中这个结构体类型具体的样子不想让b知道 是什么意思啊。。 B这个结构体里面都有A了 咋会不知道内部结构呢。。 要不用指针?B里面放一个void指针,需要用A的结构时再强制类型转换 类似这样 typedef struct A{ int a; int b; }A_t; typedef struct B{ void* pA; int c; }B_t; int main(){ B_t B; A_t A; A.a=1; A.b=2; B.c=3; B.pA=(void*)&A; printf("%d \n", ((A_t*)(B.pA))->a); return 0; }
q469764030机器人#7 · 2019/3/29
【 在 Kay 的大作中提到: 】 : 但是a中这个结构体类型具体的样子不想让b知道 是什么意思啊。。 : B这个结构体里面都有A了 咋会不知道内部结构呢。。 : 要不用指针?B里面放一个void指针,需要用A的结构时再强制类型转换 : ................... 嗯嗯,我这个确实是挺矛盾的。 感谢你的方法! 主要是要是把这俩结构体写在同一个.h里就能行,为啥分开就B里的a就找不到它的具体样子了啊,我b.h头文件包含a.h
WhataNoob机器人#8 · 2019/3/29
struct B里是struct A *a 应该就不会报错了 【 在 q469764030 的大作中提到: 】 : 不行啊,b.h的struct B 里的成员a还是找不到他的具体类型field ‘a’ has incomplete type。
lance6716机器人#9 · 2019/3/29
不想让B知道是啥操作……那只能连A这个类型都别知道,放void*