无法为指针数组分配地址?

问题描述 投票:0回答:1

我正在使用 ESP8266 开发 homekit 设备,但无法以编程方式生成服务。我需要生成其中 16 个。这是我尝试分配给

*service
的代码:

homekit_service_t *services[18] = {
  &(homekit_service_t){
    .type = HOMEKIT_SERVICE_ACCESSORY_INFORMATION,
    .characteristics = (homekit_characteristic_t *[]){
      HOMEKIT_CHARACTERISTIC(NAME, "Switch"),
      HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Arduino HomeKit"),
      HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "0123456"),
      HOMEKIT_CHARACTERISTIC(MODEL, "ESP8266/ESP32"),
      HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
      HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
      NULL,
    },
  },
  &(homekit_service_t){
    .type = HOMEKIT_SERVICE_SWITCH,
    .characteristics = (homekit_characteristic_t *[]){
      HOMEKIT_CHARACTERISTIC(NAME, "Switch"),
      &cha_switch_on,
      NULL,
    },
  },
  NULL,
};

但是,当我尝试生成附加服务时,使用以下代码:

services[3] = &(homekit_service_t){
  .type = HOMEKIT_SERVICE_SWITCH,
  .characteristics = (homekit_characteristic_t *[]){
    HOMEKIT_CHARACTERISTIC(NAME, "Switch"),
    &cha_switch_on,
    NULL,
  },
};

编译器抛出此错误:

C:\Users\black\OneDrive\Desktop\homekit\my_accessory.c:34:1: error: conflicting types for 'services'
   34 | services[3] = &(homekit_service_t){
      | ^~~~~~~~
C:\Users\black\OneDrive\Desktop\homekit\my_accessory.c:10:20: note: previous definition of 'services' was here
   10 | homekit_service_t *services[18] = {
      |                    ^~~~~~~~
C:\Users\black\OneDrive\Desktop\homekit\my_accessory.c:34:15: error: invalid initializer
   34 | services[3] = &(homekit_service_t){

如何以编程方式生成附加服务?

c esp8266 compound-literals
1个回答
3
投票

不能将诸如数组元素赋值之类的可执行语句放在函数外部。如果您想在顶层执行此操作,则必须将其作为数组声明的一部分来执行。

homekit_service_t *services[18] = {
  &(homekit_service_t){
    .type = HOMEKIT_SERVICE_ACCESSORY_INFORMATION,
    .characteristics = (homekit_characteristic_t *[]){
      HOMEKIT_CHARACTERISTIC(NAME, "Switch"),
      HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Arduino HomeKit"),
      HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "0123456"),
      HOMEKIT_CHARACTERISTIC(MODEL, "ESP8266/ESP32"),
      HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
      HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
      NULL,
    },
  },
  &(homekit_service_t){
    .type = HOMEKIT_SERVICE_SWITCH,
    .characteristics = (homekit_characteristic_t *[]){
      HOMEKIT_CHARACTERISTIC(NAME, "Switch"),
      &cha_switch_on,
      NULL,
    },
  },
  NULL,
  &(homekit_service_t){
    .type = HOMEKIT_SERVICE_SWITCH,
    .characteristics = (homekit_characteristic_t *[]){
      HOMEKIT_CHARACTERISTIC(NAME, "Switch"),
      &cha_switch_on,
      NULL,
    },
  },
};
© www.soinside.com 2019 - 2024. All rights reserved.