Как определить предварительную декларацию? - PullRequest
0 голосов
/ 27 апреля 2019

Мне нужна помощь с объявлением некоторых структур для использования в моем коде.Идея состоит в том, что мне нужно объявить некоторые структуры, которые включены друг в друга, и использовать typedef, чтобы иметь хороший стиль кодирования.

Я пытался объявить это:

typedef struct cell
{
    T_Tree list_of_sons;
    struct cell *next;
}ListCell, *T_List, **Adr_List;

typedef struct node
{
    int value;
    T_List list;
}Node, *T_Tree;

Это нене работает, потому что тип "T_Tree" не был объявлен ранее, но я хотел бы найти способ объявить их, сохраняя определения типов, показанные выше.

Ответы [ 2 ]

3 голосов
/ 27 апреля 2019

Никогда (кроме указателей функций) не скрывайте указатели в typedef-s. Это делает код более подверженным ошибкам и трудным для чтения (вы не знаете, когда видите объявление, если что-то является указателем или нет).

struct node;

typedef struct cell
{
    struct node *list_of_sons;
    struct cell *next;
}ListCell;

typedef struct node
{
    int value;
    ListCell *list;
}Node;
2 голосов
/ 27 апреля 2019

Вставьте typedef struct node *T_Tree; перед первым объявлением. Затем удалите T_tree из последнего объявления.

Это объявляет T_Tree указателем на struct node. Вы можете объявить указатель на struct, даже если struct не имеет полного определения.

...