为什么在分配给类型 'uint16_t ' 错误时会出现不兼容的类型?
Why do I get an incompatible types when assigning to type 'uint16_t ' error?
我在这段代码中得到 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;
提前致谢
您正在定义一个结构数组并尝试对其进行初始化。但是您只传递 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}};
其实有两个问题:
您正在初始化结构数组,必须这样完成:
ble_uuid_t m_adv_uuid[] = { { AMT_SERVICE_UUID, AMTS_CHAR_UUID } };
然后您正在访问结构而不是其成员 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};
我在这段代码中得到 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;
提前致谢
您正在定义一个结构数组并尝试对其进行初始化。但是您只传递 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}};
其实有两个问题:
您正在初始化结构数组,必须这样完成:
ble_uuid_t m_adv_uuid[] = { { AMT_SERVICE_UUID, AMTS_CHAR_UUID } };
然后您正在访问结构而不是其成员
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};