OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3570|回复: 3

关于结构体的问题

[复制链接]

1

主题

1

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-3-30
在线时间
2 小时
发表于 2018-4-6 20:49:29 | 显示全部楼层 |阅读模式
1金钱


之前都是看书,看程序源码分析程序为主,没上手写综合性的程序。最近打算写一个综合性的程序遇到一些问题。
比较简单的都百度搜索,看书都弄通了。今天有个问题一直没弄懂。百度搜索不知道怎么组织语言。搜不到我要的答案。故发帖求助!

问题描述:
1 在b.h文件里定义了一个结构体 a,然后又定义了a的全局结构体变量 a1。
2 在b.c文件(包含了b.h头文件)里给给全局结构体变量a1的成员变量赋初值。
3 在d.c 和 main.c(都包含了b.h头文件)里都可以正常引用或赋值 a1 的成员变量。
4 我建了一个e.c(包含了b.h 和 e.h头文件)文件,同时我在e.h里也定义了一个结构体 b,定义了结构体 b 的全局结构体变量b1
  我在e.c文件里写的void a()函数引用 a1 的成员变量就会报错。错误好像是找不到 a1。
  同时 void a() 函数引用e.h头文件里的结构体变量 b1 的成员变量是没有问题的。

然后我把void a()函数写在main.c里。
1 再引用 a1 的成员变量不会报错。
2 但是我引用e.h里定义的结构体变量 b1 的成员变量就会报错。
3 这时main.c文件里包含的头文件顺序是这样的b.h在前,e.h在后:       #include "b.h"                                                                                               #include "e.h"

4 我把这两个头文件的位置顺序掉换一下:        #include "e.h"
                                                                #include "b.h"
5 之后main.c里a1的成员变量开始报错了。b1的成员变量正常了。关于这个问题一直找不到头绪。
求解答,不胜感激!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-4-7 01:39:21 | 显示全部楼层
找不到说明就是找不到,头文件没包含,或者头文件里面没有申明定义。 用extern关键字申明下试试看。
回复

使用道具 举报

0

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2017-8-23
在线时间
23 小时
发表于 2018-4-7 02:26:36 | 显示全部楼层
你把报的错放上来啊,还有头文件是不是重复编译出的bug
回复

使用道具 举报

5

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2017-9-26
在线时间
25 小时
发表于 2018-4-13 15:31:47 | 显示全部楼层
兄弟你写的真复杂,你这个问题产生的原因是:
你在b.h 中定义了变量,那么在b.c d.c main.c 中包含了b.h文件,这是会出问题的。因为三个 .c 文件中都包含了 a1 这个变量,编译是不会通过的。
正确做法是:
在b.c 中声名变量 a1 然后在b.h 中extern 声明可以在其它文件中使用这个变量。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 15:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表