努力进行嵌套 C 结构的部分初始化 - 在“->”标记之前应使用“=”
Struggling with partial initialization of nested C struct - expected '=' before '->' token
我显然遗漏了一些重要的东西...
我有以下定义,想对嵌套结构进行部分初始化,但是
不断收到陈述错误。
我想寻求帮助,如何以正确的方式编写这个部分初始化...
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,
};
我显然遗漏了一些重要的东西...
我有以下定义,想对嵌套结构进行部分初始化,但是 不断收到陈述错误。
我想寻求帮助,如何以正确的方式编写这个部分初始化...
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,
};