我无法获得下面的代码进行编译(请参阅错误).有关更正的建议将不胜感激.
#include <stdio.h>
typedef struct {
char *fldName;
unsigned fldLen;
} Field;
typedef struct {
char *fldPrompt;
unsigned startRow;
unsigned startCol;
} Prompt;
typedef struct {
Field *fields[];
Prompt *prompts[];
unsigned numFlds; <<< invalid field declaration after empty field
} Form; <<< in '(incomplete) struct (no name)'.
Field firstName = { "fName", 12 };
Field surName = { "sName", 25 };
Field gender = { "gder", 1 };
Prompt fn = { "First Name : ", 4, 10 };
Prompt sn = { "Surname : ", 6, 10 };
Prompt gn = { "Gender : ", 8, 10 };
int main (void)
{
Form aForm = { { &firstName, &surName, &gender },
{ &fn, &sn, &gn},
3 }; <<< Multiple initializers for the same element
return 0; <<< Too many initializers
}
Run Code Online (Sandbox Code Playgroud)
您的所有错误都源于您在结构中错误地声明数组的事实.你必须指定数组的大小; 你不能只使用空括号.即这将工作:
typedef struct {
Field *fields[3];
Prompt *prompts[3];
unsigned numFlds;
} Form;
Run Code Online (Sandbox Code Playgroud)
如果您需要允许不同数量的元素,则必须使用其他内容.例如,您可以将两个字段都指向:
Field **fields;
Prompt **prompts;
Run Code Online (Sandbox Code Playgroud)
但是你必须为它们动态分配和释放内存,你绝对不能使用聚合初始化程序来初始化结构.