为什么在分配类型' uint16_t'时会出现不兼容的类型?错误?

时间:2017-10-04 08:12:54

标签: c incompatibletypeerror

我在这段代码中得到incompatible types when assigning to type 'uint16_t {aka short unsigned int}' from type 'ble_uuid_t {aka struct <anonymous>}

ble_uuid_t    ble_uuid;

ble_uuid.uuid = m_adv_uuid[0];

我已将m_adv_uuid定义为

#define AMT_SERVICE_UUID             0x2001
#define AMTS_CHAR_UUID               0x20
#define AMT_RCV_BYTES_CNT_CHAR_UUID  0x2003

ble_uuid_t m_adv_uuid[] = {AMT_SERVICE_UUID, AMTS_CHAR_UUID};

ble_uuid_t定义为

typedef struct
{
  uint16_t    uuid; 
  uint8_t     type; 
} ble_uuid_t;

提前致谢

2 个答案:

答案 0 :(得分:5)

实际上有两个问题:

  1. 你正在初始化结构数组,必须这样做:

    ble_uuid_t m_adv_uuid[] = { { AMT_SERVICE_UUID, AMTS_CHAR_UUID } };
    
  2. 然后您正在访问struct而不是其成员uuid。您的作业应如下所示:

    ble_uuid.uuid = m_adv_uuid[0].uuid;
    
  3. 或者,当然,如果您不希望m_adv_uuid成为ble_uuid_t的数组,那么只需在[]声明中删除m_adv_uuid即可{1}}和其余代码将起作用:

    ble_uuid_t m_adv_uuid = {AMT_SERVICE_UUID, AMTS_CHAR_UUID};
    

答案 1 :(得分:1)

您正在定义结构数组并尝试初始化它。但是你只为1个结构传递数据。

编译器认为您正在尝试使用不兼容的类型初始化2 ble_uuid_t个结构。

这适用于1个结构:

ble_uuid_t m_adv_uuid = {AMT_SERVICE_UUID, AMTS_CHAR_UUID};

并初始化你可以做的2个结构:

ble_uuid_t m_adv_uuid[] = {{AMT_SERVICE_UUID, AMTS_CHAR_UUID},{AMT_SERVICE_UUID, AMTS_CHAR_UUID}};