搜索
bottom↓
回复: 8

怎么在.h文件中调用另一个.h文件的结构体申明?

[复制链接]

出0入0汤圆

发表于 2018-11-30 11:22:19 | 显示全部楼层 |阅读模式
在A.h文件中申明结构体:
typedef struct
{
        uint8_t Data_head_H;                                        //帧头
        uint8_t Data_head_L;                                        //帧头
}Uart_TypeDef_y

在B.h中调用
#include "A.h"
extern  void sadasd(Uart_TypeDef_y * Uart_TypeDef_x);

编译时报错找不到Uart_TypeDef_y 结构体

这种情况该怎么解决??

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入76汤圆

发表于 2018-11-30 11:30:31 | 显示全部楼层
typedef struct
{
        uint8_t Data_head_H;                                        //帧头
        uint8_t Data_head_L;                                        //帧头
}Uart_TypeDef_y;

LZ找到区别了吗?

出0入4汤圆

发表于 2018-11-30 11:31:31 | 显示全部楼层
LZ,你这个不报错吗?

出50入58汤圆

发表于 2018-11-30 11:35:58 | 显示全部楼层
foxpro2005 发表于 2018-11-30 11:30
typedef struct
{
        uint8_t Data_head_H;                                        //帧头

少了个分号??

出0入0汤圆

 楼主| 发表于 2018-11-30 11:54:22 | 显示全部楼层
foxpro2005 发表于 2018-11-30 11:30
typedef struct
{
        uint8_t Data_head_H;                                        //帧头

这只是我临时写的几行代码,主要还是我那个问题,

在A.h文件中申明结构体:
typedef struct
{
        uint8_t Data_head_H;                                        //帧头
        uint8_t Data_head_L;                                        //帧头
}Uart_TypeDef_y;

在B.h中调用
#include "A.h"
extern  void sadasd(Uart_TypeDef_y * Uart_TypeDef_x);


编译时报错找不到Uart_TypeDef_y 结构体

这个问题最终我解决的方案是,把所有含有这个结构申明作为输入变量的函数,全部写到一个.C文件中
就是把 void sadasd(Uart_TypeDef_y * Uart_TypeDef_x);函数写到A.C文件, 而这个extern  void sadasd(Uart_TypeDef_y * Uart_TypeDef_x);搬到了A.h才没报错
这样只是临时解决了问题

出0入0汤圆

发表于 2018-11-30 12:12:23 来自手机 | 显示全部楼层
水缸仔 发表于 2018-11-30 11:54
这只是我临时写的几行代码,主要还是我那个问题,

在A.h文件中申明结构体:

。。。晕
问题在c不在h

出0入0汤圆

发表于 2018-12-2 09:35:34 | 显示全部楼层
本帖最后由 mcu5i51 于 2018-12-2 09:37 编辑

最好是上一个最简单的样本文件或工程

出0入0汤圆

发表于 2018-12-2 10:13:41 | 显示全部楼层
这个问题我也遇到过。当时也是把用到这个结构体变量的函数写在一个文件里。
后来,为了模块化,就用set(),get()接口函数解决。

出0入0汤圆

发表于 2018-12-3 09:01:40 | 显示全部楼层
在A.h文件中申明结构体:
typedef struct Uart_type
{
        uint8_t Data_head_H;                                        //帧头
        uint8_t Data_head_L;                                        //帧头
}Uart_TypeDef_y;

在B.h中调用
#include "A.h"
typedef struct Uart_type  Uart_TypeDef_y;//声明一下
extern  void sadasd(Uart_TypeDef_y * Uart_TypeDef_x);
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 21:57

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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