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条回答
laoshuhunya
1楼-- · 2019-12-19 15:48
zhikunWang 发表于 2019-2-27 09:58
这个问题同样一直困扰我,我目前是所有的头文件包含在一个文件中,然后注意头文件的顺序。
但是如果有多个 ...

文件包含可以嵌套,但不能递归(直接或间接包含自身)。
因为在一个翻译单元(即一个C文件)中类型声明不能重复,所以H头文件最好分成三类:类型声明变量/函数声明配置文件。这样不仅结构清晰层次分明,而且能很好处理你的问题。楼主的主要问题就是把“类型声明”和“变量/函数声明”混在一起,把类型声明独立出来弄个单独头文件就行了。
  
类似这样的:

100.png (2.74 KB, 下载次数: 0)

下载附件

1

2019-2-27 15:29 上传


一周热门 更多>