Прежде всего, typedef
создает «первоклассный» тип, где вы не должны говорить, что это перечисление больше при его использовании. Правильный путь вдоль линий:
typedef enum {A, B} C;
C c; // not enum C c.
Во-вторых, рассмотрим следующие два сегмента:
typedef enum {A, B} C;
enum C D;
первый создает немаркированный перечисления, а также создает псевдоним типа C
для Это. Второй создает отдельную помеченную перечисление (помечен C
) и не создает псевдонима типа (он также объявляет переменную D
, но это не важно для наших соображений здесь).
Теперь вам может быть интересно, что это имеет отношение к вашему вопросу, но если мы примем имя, которое вы использовали при создании типа, и разместите под ним имя, которое вы использовали в struct
, я бы надеялся, что это станет очевидным :
BalType
Baltype
^
An extra clue :-)
Так что упрощение вашей проблемы, таким образом, очень похож на ABCD
код, который я дал выше:
typedef enum {START, END} BalType;
enum Baltype type;
Это на самом деле сочетание этих двух вещей, дающих вам печаль. Вам кажется, чтобы создать полный перечислимый тип, и вы. Тем не менее, вы создаете совершенно разные (и неполные, так как они не имеют тела) перечисления. Будучи неполным, его нельзя использовать так, как вам нужно.
Чтобы решить эту проблему, в последней строке выше (и первый в вашей struct
) следует заменить:
BalType type;
я уже включают в себя bal.h в моем файле bal.c – Thapipo