【问题标题】:Dereferencing pointer to incomplete type while using nested structs使用嵌套结构时取消引用指向不完整类型的指针
【发布时间】:2020-11-18 19:58:26
【问题描述】:

我正在使用 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 Read 函数填充缓冲区,然后是一个解析函数,根据接收到的缓冲区更改解析器字段。

【问题讨论】:

  • 请提供minimal reproducible example。创建它实际上可能会让你发现问题。
  • @Lundin 我已经在 SO 上进行了搜索,但问题仍然存在。我在我的代码中包含了两个 xbusmessage.h xbusparser.h。 “在某些 .c 中隐藏结构定义”是什么意思?
  • 我让那位不知什么原因删除所有cmets的版主来回答。

标签: c pointers struct


【解决方案1】:

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

struct XbusParser;

所以我将定义从 .c 移到 .h 文件中,它运行良好。

问候。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 2017-02-24
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    • 2014-05-09
    相关资源
    最近更新 更多