我在文件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> ^
最佳答案
来自评论:
您的标头可能具有循环依赖关系。platform.h
要求VL53L0X_DEV
类型之前包含的一些包含内容?如果是,则必须在其他标头包括的顶部放置platform.h
。
如果vl53l0x_api.h
包含在platform.h
中,则必须在包含之前定义结构。
关于c - 无法识别Typedef Struct指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41297949/