C中的语法错误

时间:2011-07-02 05:48:55

标签: c enums

 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’

使用枚举类型有什么问题?

4 个答案:

答案 0 :(得分:9)

使用enum state或包含typedef enum state state

枚举标记位于C中与标识符(变量,函数或typedef)不同的名称空间中。

答案 1 :(得分:6)

尝试

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

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

与此FAQ entry边缘链接。这是关于namespaces的讨论。

有四种不同的命名空间:

  • 标签(即转到目标);
  • 标签(结构名称,工会, 和枚举;这三个不是 即使他们分开 理论上可能是);
  • 结构/工会成员(一名 每个结构或联合的命名空间); 和
  • 其他一切(功能, 变量, typedef名称,枚举 常数),称为“普通的 标识符''由标准。

修改

由于OP要求举例......

struct foo {
    int bar;
    int foo;
};

struct bar {
    int foo;
    struct foo bar;
};

答案 2 :(得分:2)

如果您使用c ++,则可以;

on c(not 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;

答案 3 :(得分:1)

你需要

typedef struct {
    enum state st;