typedef定义一个结构体类型,多文件引用出错,求助!

2019-12-13 18:23发布

在一个“clink.h”的文件中定义一个链表结构体
  1. typedef struct Elink{

  2.          uint8_t *  head;/*数据写入缓冲区头部*/
  3.          uint8_t *  headbuf;/*缓冲区头部指针*/
  4.          uint8_t *  endLen;/*缓冲区尾结束指针*/
  5.          uint16_t  dataLen;/*缓冲区内数据长度*/
  6.         struct Elink *next;
  7. }ClinkType;
复制代码

再在一个缓冲文件“ringBuf.h”包含了“clink.h”
  1. #include "ringBuffer.h"
  2. #include "clink.h"
复制代码

在“ringBuf.h”中定义一个函数带ClinkType 类型的指针形参
  1. bool WriteDataToRingBuffer(ringBufType_t *pRingBuf,ClinkType *Phead,uint8_t *pBuf, uint16_t len);
复制代码

编译之后报错,说ClinkType未定义: error:  #20: identifier "ClinkType" is undefined;

请问各位大神,我是用错了嘛,还是那里不对了?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
37条回答
mii
1楼-- · 2019-12-17 10:34
y1z2f4 发表于 2019-2-25 09:24
我觉得您说的对!

然而并不是这样可以解决,试过没效果
mii
2楼-- · 2019-12-17 14:17
farfar 发表于 2019-2-25 08:35
尽可能不要在.h文件中包含.h文件,很容易一不小心就变成嵌套包含导致声明文件无效。
可以将声明集中放置于 ...

我觉得你这个回答是最有可能 的了,我要花时间验证一下
mii
3楼-- · 2019-12-17 17:57
eovlon 发表于 2019-2-25 09:17
在 ringBuffer.h  里面最开始的地方包含#include "clink.h"

这应该是TYPE作用域的问题,详细现象看我23楼
zhugean
4楼-- · 2019-12-17 23:19
是不是头文件交叉相互包含引起的?
go2deathward
5楼-- · 2019-12-18 04:07
 精彩回答 2  元偷偷看……
mii
6楼-- · 2019-12-18 08:10
go2deathward 发表于 2019-2-25 10:21
你试下,将#include "ringBuffer.h"放在clink定义的下面,看是否能编过
h中包含h,可能会出现问题 ...

5.jpg (237.81 KB, 下载次数: 0)

下载附件

2019-2-25 10:34 上传



是如你所说,改变位置后是可以编译通过,就是看着难受。

在STM32的库文件中很多都是定义 在.H文件中,但他在我编写程序调用时也没提示过这种情况。

就是想知道人家是怎样实现的

一周热门 更多>