我有一个结构,定义为
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)
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标志以生成在扩展所有宏之后源代码将扩展到的内容.