1

我有一个以我调用 stringtable 的结构开头的 ac 文件,看起来像这样

struct stringtable {
   int table[];
   int numElements = 15;
};

我有一个标题,它有这个 typedef

typedef stringtable *stringtable_ref;

当我使用 gcc 编译时,出现错误:预期标识符或 '(' before '[' token expected ':' before 'int'

就像我宣布结构错误一样。我以前在 C 中做过这样的结构,所以我的问题是:我在声明我的结构时犯了错误吗?分号前需要加标签吗?是否只允许我在某些地方声明结构?

4

3 回答 3

1
struct stringtable {
   int table[];
   int numElements = 15;
};

一个灵活的数组成员 likeint table[];只能是 a 的最后一个成员struct(至少还有一个成员)。

而且您不能在struct声明中为成员分配默认值,C 不支持。

于 2012-10-02T20:06:14.367 回答
1

除非您的结构中有static成员,否则您不能在声明时初始化成员。

您需要在初始化成员之前创建结构的实例:

 struct stringtable str_table;
 str_table.numElements = 15; 
 //etc
于 2012-10-02T20:06:20.093 回答
0

我也希望你需要在标题中typedef struct stringtable *stringtable_ref

于 2012-10-02T20:13:41.990 回答