Структуры, которые ссылаются друг на друга - PullRequest
18 голосов
/ 09 декабря 2010

Я хочу иметь две структуры, которые могут содержать друг друга. Вот пример:

struct a {
  struct b bb;
};

struct b {
  struct a aa;
};

Но этот код не компилируется. GCC говорит:

test.c:3: error: field ‘bb’ has incomplete type

Есть ли способ достичь этого?

Ответы [ 4 ]

26 голосов
/ 09 декабря 2010

Как это должно работать?a будет содержать b, который будет содержать a, который будет содержать b и т. Д. *

Я полагаю, вы хотите использовать указатель вместо этого?

struct b;

struct a {
  struct b *bb;
};

struct b {
  struct a *aa;
};

Даже если это плохой стиль кодирования, следует избегать циклических зависимостей, если это возможно.

7 голосов
/ 09 декабря 2010
struct a;
struct b;

struct a{
   struct b *bb;
};

struct b{
   struct a *aa;
};

Большая часть заголовочного файла объявляет структуру перед определением ее членов. Определение структуры будет определено где-то еще.

2 голосов
/ 09 декабря 2010

Обычный способ справиться с этим - сделать их указателями, а затем динамически распределить их или даже просто назначить указатель с адреса статического экземпляра другой структуры.Однако, вы ищете древовидную организацию.Возможно, оба объекта могут указывать на общий третий тип.

0 голосов
/ 09 декабря 2010

Это бессмысленно.

Представьте, что если вы говорите, что каждый X содержит Y, а каждый Y содержит X, то внутри каждого X есть Y, который, в свою очередь, содержит X, что в В ход входит Y, который в свою очередь содержит X, до бесконечности .

Вместо этого вы можете иметь X, содержащую ссылку на или (или указатель на ) на Y и наоборот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...