[技术讨论]

C语言结构体调用问题

[复制链接]
511|18
手机看帖
扫描二维码
随时随地手机跟帖
梦幻泡影|  楼主 | 2024-7-10 11:06 | 显示全部楼层 |阅读模式
如题,最近在写一段驱动代码的时候发现了一个知识盲区,恳请大佬指点迷津。
首先是定义了一个bsp.h的头文件,文件内容如下:
#ifndef __BSP_H__
#define __BSP_H__

#include "main.h"

#ifdef __cplusplus
extern "C" {
#endif  /* __cplusplus */

typedef struct
{
    uint16_t wId;                   /**< Layer ID for this component, NEVER MODIFY! */
    void * pPalFelicaDataParams;    /**< Pointer to palFelica parameter structure. */
}phFelica;

extern phFelica mFelica;
#ifdef __cplusplus
} /* Extern C */
#endif

#endif
/**
  * @}
  */

/************************ (C) COPYRIGHT LBD Tech *****END OF FILE****/



然后定义了另一个文件SimUART.c,内容如下:
#include "SimUART.h"

void vSimUARTSendData(phFelica *pDataParams)
{
    pDataParams->wId = 1;
}
/**
  * @}
  */

/************************ (C) COPYRIGHT LBD Tech *****END OF FILE****/


SimUART.h内容如下:
#ifndef __SIMUART_H__
#define __SIMUART_H__

#include "main.h"
#include "bsp.h"

#ifdef __cplusplus
extern "C" {
#endif  /* __cplusplus */

void vSimUARTSendData(phFelica *pDataParams);

#ifdef __cplusplus
} /* Extern C */
#endif

#endif
/**
  * @}
  */

/************************ (C) COPYRIGHT LBD Tech *****END OF FILE****/


一编译就报错了,Error[Pe020]: identifier "phFelica" is undefined 。
但这个结构体已经定义过了,为什么会提示没定义呢?百思不得解

使用特权

评论回复

相关帖子

春风路过| | 2024-7-10 11:19 | 显示全部楼层
大佬路过,又是tooyuangtoosimple, 桑太思那义务。

使用特权

评论回复
LcwSwust| | 2024-7-10 11:26 | 显示全部楼层
查一下extern
傲游截图20240710112519.jpg

使用特权

评论回复
梦幻泡影|  楼主 | 2024-7-10 11:58 | 显示全部楼层

头文件那里已经extern过了

使用特权

评论回复
梦幻泡影|  楼主 | 2024-7-10 11:58 | 显示全部楼层
春风路过 发表于 2024-7-10 11:19
大佬路过,又是tooyuangtoosimple, 桑太思那义务。

啥意思?没看懂

使用特权

评论回复
LcwSwust| | 2024-7-10 12:03 | 显示全部楼层
梦幻泡影 发表于 2024-7-10 11:58
头文件那里已经extern过了

哦,看明白了吗,那么phFelica的定义在哪里?
申明和定义有啥区别?

使用特权

评论回复
春风路过| | 2024-7-10 12:14 | 显示全部楼层
本帖最后由 春风路过 于 2024-7-10 12:45 编辑

大佬已经指点你了。

使用特权

评论回复
qintian0303| | 2024-7-10 13:43 | 显示全部楼层
你在头文件里面extern,这只是一个声明,还要再C文件里面加上phFelica mFelica;

使用特权

评论回复
梦幻泡影|  楼主 | 2024-7-10 14:08 | 显示全部楼层
qintian0303 发表于 2024-7-10 13:43
你在头文件里面extern,这只是一个声明,还要再C文件里面加上phFelica mFelica;

也不行

使用特权

评论回复
qintian0303| | 2024-7-10 14:59 | 显示全部楼层

你在哪个C文件里面加的?bsp.h哪个C调用在哪个C里面加,不是随便一个就行的

使用特权

评论回复
lisasa| | 2024-7-10 16:12 | 显示全部楼层
你把定义的文件也提供一下看看,是不是你只声明,却没定义?

使用特权

评论回复
春风路过| | 2024-7-10 18:52 | 显示全部楼层
没有工程瞎猜,楼主真会出难题

使用特权

评论回复
春风路过| | 2024-7-10 20:52 | 显示全部楼层
从贴出的代码看不出问题。所以问题就在楼主不肯给出的工程里面。其实大概我也猜的着。

使用特权

评论回复
xiaokunkun| | 2024-7-10 21:06 | 显示全部楼层
从目前的说明来看,应该是没有定义这个结构体

使用特权

评论回复
梦幻泡影|  楼主 | 2024-7-11 09:24 | 显示全部楼层
春风路过 发表于 2024-7-10 20:52
从贴出的代码看不出问题。所以问题就在楼主不肯给出的工程里面。其实大概我也猜的着。 ...

找到问题所在了,是头文件包含的问题,感谢大家!

使用特权

评论回复
梦幻泡影|  楼主 | 2024-7-11 09:25 | 显示全部楼层
xiaokunkun 发表于 2024-7-10 21:06
从目前的说明来看,应该是没有定义这个结构体

头文件包含的问题

使用特权

评论回复
梦幻泡影|  楼主 | 2024-7-11 09:26 | 显示全部楼层
lisasa 发表于 2024-7-10 16:12
你把定义的文件也提供一下看看,是不是你只声明,却没定义?

这其实就是用ST厂家提供的Demo程序来验证的

使用特权

评论回复
cdlongbo| | 2024-7-11 09:27 | 显示全部楼层
楼主 没有看到你定义phFelica mFelica变量,你只有一个声明为外部变量,但是没有实际定义,编译器报错是没有问题的。

使用特权

评论回复
xionghaoyun| | 2024-7-12 07:47 | 显示全部楼层

英语啊 说你太年轻太单纯

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

294

帖子

6

粉丝