2014-12-01 2 views
2

У меня есть следующие структуры:Struct с союзом: структура не имеет ни одного члена с именем

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; 

В чем может быть причина?

+0

вам необходимо предоставить профсоюзу идентификатор, поэтому он может быть отнесен к. – user3629249

+0

Это структура, предоставленная нам в домашнем задании, поэтому я не могу дать имя профсоюзу. Есть ли другое решение? –

ответ

3

Это потому, что версия используемого вами gcc-компилятора не поддерживает неназванный союз. Смотрите эту StackOverflow link

2

Ваш союз должен иметь имя, например

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

, а затем вы можете использовать param1.union_member_name.sched_priority

+0

Это структура, предоставленная нам в домашнем задании, поэтому я не могу дать имя профсоюзу. Есть ли другое решение? –

+0

@helloV уже дал вам решение. –

Смежные вопросы