使用联合体的结构体:结构体没有名为的成员

4

我有以下结构:

struct sched_param {
    union {
        int sched_priority;
        struct lshort_sched_param lshort_params;
    };
};

struct lshort_sched_param {
    int requested_time;
    int level;
};

每当我创建一个 sched_param param1 结构并尝试更新 param1.sched_priority 字段时,就会收到主题中写的消息。
struct sched_param param1;
param1.sched_priority = 1;

但是,每当我创建一个sched_param param2并尝试更新param2.lshort_params.level时,它都能正常工作。

struct sched_param param2;
param2.lshort_params.level= 1;

可能的原因是什么?

你需要给联合体一个标识符,这样它才能被引用。 - user3629249
这是一个在作业任务中给定的结构体,所以我不能给联合起名字。有其他解决方案吗? - Nadav Peled
2个回答

3
您的联盟应该有一个名称,例如:
struct sched_param {
    union {
        int sched_priority;
        struct lshort_sched_param lshort_params;
    } union_member_name;
};

接着,您可以使用param1.union_member_name.sched_priority


这是一个在作业任务中给定的结构体,所以我不能给联合起名字。有其他解决方案吗? - Nadav Peled
@helloV已经给你提供了一个解决方案。 - Iharob Al Asimi

3

这是因为您使用的gcc编译器版本不支持匿名联合。请参考此stackoverflow链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接