2017-10-04 41 views
1

我在这段代码为什么在分配类型'uint16_t'错误时会得到不兼容的类型?

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; 

由于其中我已经定义得到一个incompatible types when assigning to type 'uint16_t {aka short unsigned int}' from type 'ble_uuid_t {aka struct <anonymous>}

回答

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; 
    

或者,当然了,如果你不想m_adv_uuid做才能成为ble_uuid_t数组,这足以只是删除[]m_adv_uuid声明和休息的你代码将起作用:

ble_uuid_t m_adv_uuid = {AMT_SERVICE_UUID, AMTS_CHAR_UUID}; 
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}}; 
相关问题