在一个“clink.h”的文件中定义一个链表结构体
- typedef struct Elink{
- uint8_t * head;/*数据写入缓冲区头部*/
- uint8_t * headbuf;/*缓冲区头部指针*/
- uint8_t * endLen;/*缓冲区尾结束指针*/
- uint16_t dataLen;/*缓冲区内数据长度*/
- struct Elink *next;
- }ClinkType;
复制代码
再在一个缓冲文件“ringBuf.h”包含了“clink.h”
- #include "ringBuffer.h"
- #include "clink.h"
复制代码
在“ringBuf.h”中定义一个函数带ClinkType 类型的指针形参
- bool WriteDataToRingBuffer(ringBufType_t *pRingBuf,ClinkType *Phead,uint8_t *pBuf, uint16_t len);
复制代码
编译之后报错,说ClinkType未定义: error: #20: identifier "ClinkType" is undefined;
请问各位大神,我是用错了嘛,还是那里不对了?
我猜想也是,但为什么STM32库里文件很多这种写法,但人家就没有出现这种情况。我们平时在什么文件调用声明都可以
大概官方的是没有交叉包含吧
把clink.h中的第7行挪到第17行,包你编译通过。
看23楼最后一张图,Clink.c这一行,下面的未定义的提示。
是Clink.h包含了ringBuffer.h
应该是头文件互相包含引起的。Clink.h包含了ringBuffer.h,而ringBuffer.h又包含了clink.h
所以就呵呵了。
修改,是.h文件互相包含了。导致编译器在展开的时候,就没有链表的定义的。请阅读关于#ifdef在.h文件开头的使用。
但是如果有多个结构体在多个头文件中,然后还有一个函数形参包含多个结构体,这个时候编译
大多会编译不通过,这个时候不知如何解决声明在前,使用在后的问题?
一周热门 更多>