Итак, я решил свою проблему, не так уж и сложно, но я блуждаю, почему первая версия не работала. Итак, вот пример моей проблемы:
typedef struct a {
int i;
} A;
typedef struct b {
int i;
A a;
} B;
typedef B * PB;
PB create_B(int ia, int ib) {
PB b = malloc(sizeof(B));
b->i = ib;
b->a = {ia};
}
Я получаю сообщение об ошибке от компилятора:
"error: ожидаемое выражение перед '{' token"
в строке: b-> a = {ia};
Но я действительно не понимаю, в чем проблема.
Я решил это преобразованием структуры:
PB create_B(int ia, int ib) {
PB b = malloc(sizeof(B));
b->i = ib;
b->a = (A){ia};
}
а типы четко определены нет? Я имею в виду, что для меня отчасти очевидно, что {ia} имеет тип A, поскольку b-> a также имеет тип A.
Я, вероятно, ошибаюсь в этом последнем высказывании (компилятор, вероятно, прав). Так что, если у вас есть пример, в котором эта ситуация неочевидна и действительно нуждается в приведении, это будет действительно полезно или, по крайней мере, дать объяснение.
Спасибо за ваше время.
Бариот
PS: Я тоже мог бы это сделать, думаю
PB create_B(int ia, int ib) {
PB b = malloc(sizeof(B));
*b = (B){ib, {ia}};
}
Но мне все еще нужен гипс ...