【问题标题】:Typedef Struct pointer not recognizedTypedef 结构指针无法识别
【发布时间】:2016-12-23 08:39:31
【问题描述】:

我在文件platform.h中有一个结构定义:

typedef struct {
    VL53L0X_DevData_t Data;
    uint8_t   I2cDevAddr;  
    uint8_t   comms_type;  
    uint16_t  comms_speed_khz;
    uint16_t  devID;
    I2C_HandleTypeDef * i2c_handle;
} VL53L0X_Dev_t;

还有一个 typedef 指向同一个文件中这样的指针:

typedef VL53L0X_Dev_t* VL53L0X_DEV;

在另一个文件中,对 VL53L0X_DEV 的引用失败并显示为 error: unknown type name 'VL53L0X_DEV' 我在这个其他文件中包含了platform.h。这有什么问题?

编辑

我一直坚持使用供应商提供的这段代码(很多代码),因此没有太多的余地可以取消指针 typedef 或提供 MCVE 示例。这是相关的构建日志。它似乎包括vl53l0x_platform.h 文件好吧。感谢您的帮助!

1>  >>Building build/vl53l0x_platform.o
1>  arm-none-eabi-gcc -ffreestanding -mcpu=cortex-m4 -mthumb -mfloat-abi=soft -Og -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-move-loop-invariants -g3 -nostartfiles -I"conf" -I"inc" -IC:/Users/sohail/Documents/Cloud/STM32Cube_FW_F4_V1.7.0/Drivers/STM32F4xx_HAL_Driver/Inc -IC:/Users/sohail/Documents/Cloud/STM32Cube_FW_F4_V1.7.0/Drivers/CMSIS/Include -I"C:\Users\sohail\Documents\gcc-arm_launchpad_binaries\lib\gcc\arm-none-eabi\4.9.3\include" -I"C:\Users\sohail\Documents\gcc-arm_launchpad_binaries\arm-none-eabi\include\sys" -I"C:\Users\sohail\Documents\gcc-arm_launchpad_binaries\arm-none-eabi\include" -std=gnu11 -c -o build/vl53l0x_platform.o src/vl53l0x_platform.c
1>  In file included from inc/vl53l0x_api.h:33:0,
1>                   from inc/main.h:44,
1>                   from inc/vl53l0x_platform.h:34,
1>                   from src/vl53l0x_platform.c:37:
1>  inc/vl53l0x_api_strings.h:39:39: error: unknown type name 'VL53L0X_DEV'
1>   VL53L0X_Error VL53L0X_get_device_info(VL53L0X_DEV Dev, VL53L0X_DeviceInfo_t *pVL53L0X_DeviceInfo);
1>                                         ^

【问题讨论】:

  • 你应该发帖MCVE
  • 完全猜测:paltform.h 之前包含的某些包含需要VL53L0X_DEV 类型?如果是,platform.h 必须位于其他标题的顶部。
  • 你不应该尝试 typedef 指针 - 你会不必要地混淆自己。
  • 按照建议,切换包含的顺序:platform.h 之前 vl53l0x_api.h
  • 或者,如果vl53l0x_api.h 包含在platform.h 中,则必须在包含之前定义结构。

标签: c pointers struct typedef


【解决方案1】:

来自 cmets:

您的标题可能存在循环依赖关系。

platform.h 之前包含的某些包含需要VL53L0X_DEV 类型?如果是,platform.h 必须位于其他标题包括的顶部。

如果vl53l0x_api.h 包含在platform.h 中,则必须在包含之前定义结构。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 2010-12-05
    相关资源
    最近更新 更多