Структуры typedef, которые имеют указатели друг на друга - PullRequest
5 голосов
/ 04 сентября 2011

Ansi C позволяет двум различным структурам содержать указатели друг на друга (также показано в структурах, которые ссылаются друг на друга ). Я знаю, что это не очень хорошая идея во многих обстоятельствах, но здесь вопрос не в этом. Можно ли добиться того же, используя структурированные по определению структуры?

Код ниже работает просто отлично.

struct b;
typedef struct a {
    struct b *bb;
} A;
typedef struct b {
    struct a *aa;
} B;

Но при использовании типа "B" это не удается

typedef struct b B;
typedef struct a {
    B *bb;
} A;
typedef struct b {
    A *aa;
} B;

с

ошибка: переопределение typedef ‘B’

Можно ли сказать компилятору, что "B" будет объявлен позже, и использовать его в определении A?

Ответы [ 2 ]

10 голосов
/ 04 сентября 2011

Вы можете сделать это вместо этого:

typedef struct a A;
typedef struct b B;

struct a {
    B *bb;
};
struct b {
    A *aa;
};

Это работает для вас?

3 голосов
/ 04 сентября 2011

Проблема в том, что вы уже напечатали его.

Вы должны сделать что-то вроде этого:

struct a;
struct b;
typedef struct a A;
typedef struct b B;

И тогда вы можете определить struct a и b и использовать a, b, A *, B * в определениях a и b

...