错误:在'Hash_Flag'之前预期','或'...'

lex*_*xie 0 c++ enums struct

我有一个结构,定义为

typedef struct
{
  char* p_hash_start_position;
  size_t hash_capacity;

  //still a flag is needed since we might start from an empty container.
  Hash_Flag hash_status;

  char* p_start_position;
  char* p_current_position;
  size_t capacity;//tagged data capacity
} tagged_data_t;  
Run Code Online (Sandbox Code Playgroud)

枚举定义为

typedef enum Hash_Flag
{
    TD_HASH,
    TD_NO_HASH
} Hash_Flag;
Run Code Online (Sandbox Code Playgroud)

为什么我会收到以下错误?

error: expected ',' or '...' before 'Hash_Flag'
Run Code Online (Sandbox Code Playgroud)

jxh*_*jxh 5

enum Hash_Flag应该在使用之前定义.重新排列代码,以便遵循结构定义enum Hash_Flag.

typedef enum Hash_Flag
{
    TD_HASH,
    TD_NO_HASH
} Hash_Flag;

typedef struct
{
  char* p_hash_start_position;
  size_t hash_capacity;

  //still a flag is needed since we might start from an empty container.
  Hash_Flag hash_status;

  char* p_start_position;
  char* p_current_position;
  size_t capacity;//tagged data capacity
} tagged_data_t;
Run Code Online (Sandbox Code Playgroud)

如果我编写如下代码,我可以重现您报告的问题:

  1  typedef enum Hash_Flag
  2  {
  3      TD_HASH,
  4      TD_NO_HASH
  5  } Hash_Flag;
  6
  7  int foo(int x Hash_Flag) {}

$ g++ -c t.cc
t.cc:7: error: expected ',' or '...' before 'Hash_Flag'
Run Code Online (Sandbox Code Playgroud)

您应该转到编译器错误报告的精确代码行,并查看是否可以在函数参数之间看到缺少的逗号.

如果您没有在编译器报告错误的代码行中发现明显缺少的逗号,则错误可能是由于扩展的宏.尝试让编译器为您扩展宏,以便在扩展后观察代码.使用g++,您将传递-E标志以生成在扩展所有宏之后源代码将扩展到的内容.