【发布时间】:2012-04-16 13:20:50
【问题描述】:
我一直在浏览有关在结构中初始化联合的问题的 stackoverflow,但我没能做到正确。
这是我的结构
typedef struct dc_netif_filter {
unsigned char filter_type;
union {
uint32_t itf_nb;
char * buf;
} value;
} dc_netif_filter_t;
在我的代码中,我尝试使用:
dc_netif_filter_t netif = {DC_NETIF_SELECT_NAME,{{0, "tun"}}};
这给出了错误:用于类型“uint32_t”的标量初始值设定项的大括号
和
dc_netif_filter_t netif = {DC_NETIF_SELECT_NAME,{0, "tun"}};
这给出了错误:'dc_netif_filter::'的初始化程序太多
如何声明这样的 dc_netif_filter_t ?
我在 ubuntu 上使用 g++。请注意,dc_netif_filter_t 不是我可以修改的结构,因为它来自第三方项目。
**编辑:正如我已经解释过的,我只能初始化一个字段。问题在于
dc_netif_filter_t netif = {DC_NETIF_SELECT_NAME,"tun0"};
我收到一个转换错误:从“const char*”到“uint32_t”的无效转换
谢谢
【问题讨论】:
-
你只初始化一个联合体的成员。
-
你不想初始化所有个联合体的成员;怎么样:
dc_netif_filter_t netif = {DC_NETIF_SELECT_NAME, "tun"}; -
那么我如何将 buf 设置为“tun”,然后将 0 设置为 itf_nb?
-
你没有。工会不是结构。顺便说一句,您的代码看起来像 C,而不是 C++。
-
@trojanfoe 我得到“错误:从‘const char*’到‘uint32_t’的无效转换”