incomplete type is not allowed

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关键字反而没啥问题。

时间: 2024-10-10 17:07:37

incomplete type is not allowed的相关文章

ifstream:incomplete type is not allowed

IntelliSense: incomplete type is not allowed ifstream inputFile; Need to add this: #include <fstream>

gcc: dereferencing pointer to incomplete type错误

/*********************************************************************  * Author  : Samson  * Date    : 07/27/2014  * Test platform:  *              Mint 15  *              GNU bash, version 4.2.45  * *************************************************

关于编译报错“dereferencing pointer to incomplete type...

今天同事问了我一个问题,他make的时候报错,“第201行:dereferencing pointer to incomplete type”,我随即查阅了很多资料,也没看出个所以然.最后问题得到了解决,也懂得了原理,遂记录一下. 他的问题具体是这样. ? 1 2 3 4 5 6 #include <netinet/ip_icmp.h> ... struct icmp* aaa;     aaa = (struct icmp*)malloc(sizeof(struct icmp)); //假设

Redhat编译php-5.2.9出现error dereferencing pointer to incomplete type

错误1: /usr/src/php-5.2.9/ext/dom/node.c:In function 'dom_canonicalization': /usr/src/php-5.2.9/ext/dom/node.c:1950:21: error: dereferencingpointer to incomplete type ret = buf->buffer->use; ^ Infile included from /usr/src/php-5.2.9/main/php.h:38:0, f

解决编译错误:dereferencing pointer to incomplete type 的办法

在使用c语言写程序时,可能遇到错误:error :dereferencing pointer to incomplete type.其实,这个错误是指针指向的结构体类型没有定义. 原因可能有很多,但最多情况可能下面两种: 1,使用库函数或内核等提供的结构体时,没有包含相应的头文件.解决方法很简单,就是包含对应头文件就ok了. 2,若是自己定义的结构体,而且这个结构体恰恰是定义在.c文件中.在这种情况下,在其他.c文件中使用该结构体指针时,也会出现类似错误. 就第二种情况,笔者找到两种解决方法:

Render QGraphicsItem on QPixmap: aggregate &#39;QWidget w&#39; has incomplete type and cannot be defined

Render QGraphicsItem on QPixmap: aggregate 'QWidget w' has incomplete type and cannot be defined #include <QWidget> and #include <QStyleOptionGraphicsItem> should fix the compile error you are getting. 常见错误: 头文件未包含 Render QGraphicsItem on QPix

程序编译是出现&quot;field has incomplete type&quot;问题的解决

在编译程序是出现了如下错误, 类或结构体的前向声明只能用来定义指针对象或引用,因为编译到这里时还没有发现定义,不知道该类或者结构的内部成员,没有办法具体的构造一个对象,所以会报错. 将类成员改成指针就好了. 程序中使用incomplete type实现前置声明有助与实现数据的隐藏.要求调用对象的程序段只能使用声明对象的引用或者指针. 在显式声明异常规范的时候不能使用incomplete type.

linux dereferencing pointer to incomplete type错误

修改内核时,make uImage 时遇到这么一个错误: "dereferencing pointer to incomplete type" 该错误的解释是:你的指针,有一个类型,这个类型是不完全的.也就是说,我们只给出了 这个类型的声明,没有给出其定义.这里的类型多半是结构,联合之类的东西. 这个错误其实是因为某结构体或联合的字段名所指的变量定义的头文件没有引入到当前C代 码中而造成的错误,只要找到出错对应的变量的结构体或联合的定义的头文件,并把这些头 文件包含进来即可解决此问题.

Solve Error: &#39;has incomplete type&#39;, foward declaration of &#39;class x&#39;

在C++的OOB编程中,有时候我们会遇到这样的错误Error: 'has incomplete type',forward declaration of 'class x',那么是什么原因引起的这个问题呢,我们首先来看下面这段代码: // Error: field '_a' has incomplete type 'A' // forward declaration of 'class A' class A; class B { public: B(A a): _a(a) {} private: