我有一个以我正在调用stringtable的结构开头的c文件,看起来像这样
struct stringtable {
int table[];
int numElements = 15;
};
我有一个标题,它有这个typedef
typedef stringtable *stringtable_ref;
当我使用gcc编译时,我得到错误: 预期的标识符或'('''''之前的标记 在'int'之前预期':'
像我已经声明结构错误一样。我之前在C中完成了结构,所以我的问题是:我是否在宣布我的结构时犯了错误?分号前是否需要标记?是否只允许某些地方申报结构?答案 0 :(得分:1)
struct stringtable {
int table[];
int numElements = 15;
};
像int table[];
这样的灵活数组成员只能是struct
的 last 成员(至少还有一个成员)。
并且您无法在struct
声明中为成员分配默认值,C不支持该声明。
答案 1 :(得分:1)
除非您的结构中有static
成员,否则您无法在声明时初始化成员。
您需要在成员初始化之前创建结构的实例:
struct stringtable str_table;
str_table.numElements = 15;
//etc
答案 2 :(得分:0)
我还希望您在标题typedef struct stringtable *stringtable_ref