簡體   English   中英

C 中的語法錯誤

[英]Syntax error in C

 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 state或包括typedef enum state state

枚舉標簽在 C 中的命名空間與標識符(變量、函數或類型定義)不同。

嘗試

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

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

勉強鏈接到這個常見問題條目 這是關於命名空間的討論。

有四種不同類型的命名空間,用於:

  • 標簽(即轉到目標);
  • 標簽(結構、聯合和枚舉的名稱;這三個不是分開的,即使它們理論上可以分開);
  • 結構/聯合成員(每個結構或聯合一個命名空間);
  • 其他一切(函數、變量、 typedef 名稱、枚舉常量),被標准稱為“普通標識符”。

編輯

由於OP要求舉個例子..

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM