博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
incomplete type is not allowed
阅读量:6045 次
发布时间:2019-06-20

本文共 1212 字,大约阅读时间需要 4 分钟。

keil环境下,报错#70: incomplete type is not allowed,解决

mqtt_conf.h 定义了一个结构体

mqtt_buffer.h

#include <stdint.h>

#include "mqtt.h"

定义了一个结构体

struct MqttBuffer

{
struct MqttExtent *first_ext;
struct MqttExtent *last_ext;
uint32_t available_bytes;
char **allocations;
char *first_available;
uint32_t alloc_count;
uint32_t alloc_max_count;
uint32_t buffered_bytes;
};

c.h

#include <stdint.h>

#include <time.h>
#include "mqtt_conf.h"
#include "mqtt_buffer.h"

  定义了一个结构体

struct MqttSampleContext

{
uint32_t sendedbytes;
struct MqttBuffer mqttbuf[1];
struct MqttContext mqttctx[1];
const char *proid;
const char *devid;
const char *apikey;
int dup;
enum MqttQosLevel qos;
int retain;
uint32_t publish_state;
uint16_t pkt_to_ack;
char cmdid[MQTT_LEN_MAX];
};

编译报错如下:

..\User\mqtt.h(189): error:  #70: incomplete type is not allowed

      struct MqttBuffer mqttbuf[1];

搜索了很多文章,没有找到原因。

后来 受到下面这个链接的启发,原来在mqtt_buffer.h 多了#include "mqtt.h"。原来在a.h里的内容比较少,我将内容搬到mqtt.h里了,所以才加了这句。恢复回去,就好了。

http://zhidao.baidu.com/link?url=HTiXra-5HCPCfj0_VleRYX5s9aDKBLnZjRBOEahUDPMF6u2CYBJ2yuxlaXIZZfihkRl1eWPUJZE-9JAXcmzrZq

结论,#include 的文件之间最好是单向的关系。在功能划分的时候,应尽量避免这个问题。keil的c跟标准的c似乎有些区别,很多时候没用 extern关键字反而没啥问题。

转载于:https://www.cnblogs.com/htsky/p/5936703.html

你可能感兴趣的文章
centos swig 编译c,python调用
查看>>
超大规模数据中心究竟有何不同?
查看>>
如何规划基于Docker的微服务?
查看>>
存储需求动能强劲,第四季DRAM合约价有望再涨逾一成
查看>>
Web安全之SQL注入攻击
查看>>
《Web测试囧事》——2.3 修改产品代码时忽视了对遗留数据的处理
查看>>
CETC/ISA院长马林:中国或因物联网而领跑全球
查看>>
《C语言编程魔法书:基于C11标准》——2.2 整数在计算机中的表示
查看>>
MaxCompute分区表和非分区表使用对比
查看>>
IE 仍是全球第一大浏览器,Edge 完全没影
查看>>
《机器人爱好者(第2辑)》——警用和安保机器人
查看>>
微软允许欧洲政府检查其软件的源代码
查看>>
算法是内功,程序员别冷落算法!
查看>>
Google Chrome 对 HTTPS 的双重标准?
查看>>
《电脑音乐制作实战指南:伴奏、录歌、MTV全攻略》——2.4 将音乐CD转换成WAV、MP3...
查看>>
《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——导读
查看>>
《CCNP ROUTE 300-101认证考试指南》——2.11节完成记忆测试表
查看>>
《例说51单片机(C语言版)(第3版)》——1-4 MCS-51的时序分析与复位
查看>>
并发编程实战 2.1. 使用synchronized实现同步
查看>>
《HBase企业应用开发实战》—— 第1章 认识HBase
查看>>