Порядок определения struct
не является проблемой, скорее он связан с использованием пока еще неопределенного typedef
для определения struct
члена ...
В этом объявлении:
typedef struct YListNode {
int Yval;
YListNode *next;
}YListNode;
Один и тот же символ (YListNode
) используется для struct name
(или struct tag
) и typedef
для struct
. Это проблема по двум причинам:
Первая - двусмысленность. Сохранение кода в будущем потребует дополнительного внимания со стороны кодировщиков, чтобы правильно применять этот многократно определенный символ.
Второй, касающийся вашего конкретного c вопроса, заключается в том, что до struct typedef
(YListNode
) определено, его не следует использовать в определении любого члена этого struct
.
Эта конфигурация в компиляторе CLANG
приводит к этой ошибке: 9, 5 error: must use 'struct' tag to refer to type 'YListNode'
Для решения проблемы:
Любой выберите различные символы для этих struct
компонентов. Например:
typedef struct yNode {
int Yval;
struct yNode *next;
}YListNode;
И применить то же самое к другим объявлениям.
Или использовать следующие предварительные объявления, помещенные до операторы определения структуры:
typedef struct YListNode YListNode;
typedef struct YList YList;
typedef struct XListNode XListNode;
typedef struct List List;