Вы должны понимать разницу между декларацией и определением. На данный момент я отложил typedef
в сторону. Чтобы иметь возможность сделать это определение :
struct A {
struct B *b;
};
, вы должны ПЕРВЫЙ объявить struct B
. Обратите внимание, что если вы объявили что-то перед определением, определение считается как определением, так и объявлением. Но в этом случае из-за циклической зависимости нам нужны отдельные объявления. Вы можете решить это с помощью:
struct A;
struct B;
Эти две строки в основном говорят: «существует две структуры, и их имена A и B».
В большинстве случаев предпочтительным решением будет примерно так:
ах
#ifndef A_H
#define A_H
typedef struct A A;
#endif
аналогично для чч
а. c
#include "a.h"
#include "b.h"
struct A {
struct B* B;
};
Примечание, не используйте разные имена для структуры и typedef, если у вас нет веских причин не делать этого. (Бьюсь об заклад, вы не можете), и если вы все равно решите сделать это, не рекомендуется начинать с подчеркивания, потому что они зарезервированы для будущего использования.
Я написал соответствующий ответ на эту топи c: { ссылка }