5 enum state {ST_BEFORE_KEY, ST_IN_KEY, ST_BEFORE_VALUE, ST_TERM, ST_ERR}; 6 7 typedef struct { 8 state st; ...
Приведенный выше код сообщает:
error: expected specifier-qualifier-list before ‘state’
Что здесь не так при использовании типа enum?
Использовать enum state или включать typedef enum state state.
enum state
typedef enum state state
Теги перечисления находятся в другом пространстве имен в C, чем идентификаторы (переменные, функции или typedefs).
Попробуйте
enum state {ST_BEFORE_KEY, ST_IN_KEY, ST_BEFORE_VALUE, ST_TERM, ST_ERR}; typedef struct { enum state st; ... };
Маргинально связано с этой записью часто задаваемых вопросов .И вот обсуждение пространств имен .
Существует четыре различных типа пространств имен для:
РЕДАКТИРОВАТЬ
Поскольку ОП запрашивает пример ..
struct foo { int bar; int foo; }; struct bar { int foo; struct foo bar; };
Если вы используете c ++, это нормально;
на c (не c ++) вы должны написать так:
5 enum state {ST_BEFORE_KEY, ST_IN_KEY, ST_BEFORE_VALUE, ST_TERM, ST_ERR}; 6 7 typedef struct { 8 enum state st;
Вам нужно
typedef struct { enum state st;