Синтаксическая ошибка в C - PullRequest
1 голос
/ 02 июля 2011
 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?

Ответы [ 4 ]

9 голосов
/ 02 июля 2011

Использовать enum state или включать typedef enum state state.

Теги перечисления находятся в другом пространстве имен в C, чем идентификаторы (переменные, функции или typedefs).

6 голосов
/ 02 июля 2011

Попробуйте

enum state {ST_BEFORE_KEY, ST_IN_KEY, ST_BEFORE_VALUE, ST_TERM, ST_ERR};

typedef struct {
    enum state st;
    ...
};

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

Существует четыре различных типа пространств имен для:

  • меток (т. Е. Целей Goto);* теги (имена структур, объединений и перечислений; эти три не являются отдельными, хотя теоретически они могут быть);
  • члены структуры / объединения (одно пространство имен на структуру или объединение);и
  • все остальное (функции, переменные, имена typedef , константы перечисления), называемые стандартом "обычными идентификаторами".

    РЕДАКТИРОВАТЬ

    Поскольку ОП запрашивает пример ..

    struct foo {
        int bar;
        int foo;
    };
    
    struct bar {
        int foo;
        struct foo bar;
    };
    
2 голосов
/ 02 июля 2011

Если вы используете 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;
1 голос
/ 02 июля 2011

Вам нужно

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