微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用嵌套结构时将指针取消引用为不完整类型

如何解决使用嵌套结构时将指针取消引用为不完整类型

我正在使用Xsens开发的库,以便在我的项目中使用其mti710-GNSS-INS。该库具有以下结构(在标头 xbusmessage.h 内部 xbusparser.h 内)

struct XbusParser {
    struct XbusParserCallback callbacks;
    struct XbusMessage currentMessage;
    uint16_t payloadReceived;
    uint8_t checksum;
    enum XbusParserState state;
};

struct XbusParserCallback{
    void* (*allocateBuffer)(size_t bufSize);
    void (*deallocateBuffer)(void const* buffer);
    void (*handleMessage)(struct XbusMessage const* message);
};

struct XbusMessage{
    enum XsMessageId mid;
    uint16_t length;
    void* data;
};

在我的代码中,我有一个struct XbusParser* xSensBusParser;作为全局变量。 每次尝试访问“解析器结构”的任何字段时,都会出现以下错误错误:将指针取消引用到不完整的类型。下面是示例代码

bool mti710WakeUp(struct XbusParser* parser,const uint32_t timeout_ms){

    mti710ReadData(parser,sizeof(struct XbusMessage));
    blockingDelay(timeout_ms,TIME_MS); 
    return parser->currentMessage.mid == XMID_Wakeup ? true : false;
}

请注意,在mti710ReadData中,有一个UART读取函数填充一个缓冲区,然后有一个解析函数根据接收到的缓冲区更改解析器字段。

解决方法

如@Lundin在上面的注释中所建议的那样, xbusparser.c 中有一个隐藏的结构定义,而在相关的头文件中只有一个

struct XbusParser;

所以我将定义从.c移到了.h文件,并且效果很好。

致谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。