【问题标题】:error: expected ',' or '...' before 'Hash_Flag' [closed]错误:“Hash_Flag”之前的预期“,”或“...” [关闭]
【发布时间】:2014-08-07 20:38:38
【问题描述】:

我有一个结构体,定义为

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;  

并且枚举被定义为

typedef enum Hash_Flag
{
    TD_HASH,
    TD_NO_HASH
} Hash_Flag;

为什么会出现以下错误?

error: expected ',' or '...' before 'Hash_Flag'

【问题讨论】:

  • 请创建一个生成错误的简单代码序列:您有两个代码序列,还有一个语法错误,不知道它发生在哪一行。顺便说一句,typedef struct { ... } tagged_data_t; 是 C 风格,试试struct tagged_data_t { ... };Hash_Flag 类似。
  • 令牌...只能合法地出现在函数声明中;它用于声明可变参数函数(如printf)。如果编译器期望看到... 标记,那么它一定是在处理函数声明(除非它被严重混淆,这并非不可能)。你没有向我们展示任何看起来像函数声明的东西。您需要更新您的问题以显示产生错误的实际代码。我应该能够将您问题中的代码复制并粘贴到我自己计算机上的文件中,然后自己重​​现错误。
  • 为什么这个问题同时被标记为 C 和 C++?您使用哪种语言?
  • @KeithThompson 我正在使用 C++... 对不起
  • 那么,您要更新问题吗?就目前而言,我们无法诊断问题。

标签: c++ struct enums


【解决方案1】:

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;

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

  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'

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

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

【讨论】:

  • 在我的真实代码中,我在使用 Hash_Flag 之前先定义它。所以这应该不是问题。
  • 您应该发布足够多的代码来实际产生问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 2013-09-23
  • 2023-03-31
  • 1970-01-01
  • 2014-11-10
  • 2018-05-17
  • 1970-01-01
相关资源
最近更新 更多