【问题标题】:error: variable 'size_map' has initializer but incomplete type错误:变量“size_map”具有初始化程序但类型不完整
【发布时间】:2020-05-14 22:27:35
【问题描述】:

尝试使用新的 esp-open-rtos (esp8266 sdk) 编译此代码但看到错误

app_main.c:446:10: error: variable 'size_map' has initializer but incomplete type
 enum flash_size_map size_map = system_get_flash_size_map();
uint32_t user_rf_cal_sector_set(void) {
enum flash_size_map size_map = system_get_flash_size_map();
uint32_t rf_cal_sec = 0;

switch (size_map) {
    case FLASH_SIZE_4M_MAP_256_256:
        rf_cal_sec = 128 - 5;
        break;

    case FLASH_SIZE_8M_MAP_512_512:
        rf_cal_sec = 256 - 5;
        break;

    case FLASH_SIZE_16M_MAP_512_512:
    case FLASH_SIZE_16M_MAP_1024_1024:
        rf_cal_sec = 512 - 5;
        break;

    case FLASH_SIZE_32M_MAP_512_512:
    case FLASH_SIZE_32M_MAP_1024_1024:
        rf_cal_sec = 1024 - 5;
        break;

    default:
        rf_cal_sec = 0;
        break;
}   

return rf_cal_sec;

}

尝试使用 flash_size_map size_map = system_get_flash_size_map(); 但看到这个:

src/app_main.c:446:5: error: unknown type name 'flash_size_map'
 flash_size_map size_map = system_get_flash_size_map();
 ^

【问题讨论】:

  • @B Jackson 使用 int 类型而不是枚举类型。或者在这个函数定义之前包含枚举的定义。编译器看不到枚举的定义。
  • 你是否包含了定义flash_size_map枚举的头文件?

标签: c esp8266


【解决方案1】:

当没有提供正确的包含文件时会发生这种错误。

请注意,仅使用枚举前向声明是不够的 - 您必须正确定义类型。

参见an example on godbolt.org - 如果取消注释第 9 行,编译将成功。

关于您的应用程序,您需要#include esp_system.h>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 2011-05-16
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多