我在这里显然错过了一些重要的东西......
我有以下定义,并希望对嵌套结构进行部分初始化,但是 不断收到声明错误。
我恳请帮助,如何以正确的方式编写此部分初始化......
struct cb_data {
void (*filter_match)(struct bt_scan_device_info *device_info,
struct bt_scan_filter_match *filter_match,
bool connectable);
...
};
struct bt_scan_cb {
const struct cb_data *cb_addr;
sys_snode_t node;
};
static void scan_filter_match(
struct bt_scan_device_info *device_info, struct bt_scan_filter_match *filter_match, bool connectable) {
char addr[BT_ADDR_LE_STR_LEN];
bt_addr_le_to_str(device_info->addr, addr, sizeof(addr));
}
static struct bt_scan_cb scan_cb = {
.cb_addr->filter_match = scan_filter_match,
};
提前感谢您的建议, 问候 欺负。
在初始化scan_cb.cb_addr
之前,您正在取消引用它。这是未定义的行为。在初始化之前scan_cb.cb_addr
考虑scan_cb.cb_addr->filter_match
是没有意义的,所以让我们从这个开始。
static struct cb_data foo {
};
static struct bt_scan_cb scan_cb = {
.cb_addr = &foo,
};
现在scan_cb.cb_addr
指向一个有效的结构,初始化scan_cb.cb_addr->filter_match
变得微不足道。
static struct cb_data foo {
.filter_match = scan_filter_match,
};
static struct bt_scan_cb scan_cb = {
.cb_addr = &foo,
};