我有以下嵌套struct
定义:
typedef struct {
int count;
float cash;
char item[50];//switch between array and pointer for testing initializers
//char *item;
}Purchase;
typedef struct {
int accnt;
char acct_name[50];
Purchase purch;
} Acct;
就其Purchase struct
本身而言,以下初始化程序起作用:
//Uses member names:
/* 1 */Purchase p = {.count = 4, .cash = 12.56, .item = "thing"};
// Note: this member: ^^^^^^^^^^^^^^^
对于嵌套结构Acct
,以下工作:
// No member names:
/* 2 */Acct acct = {100123, "Robert Baily", {15, 12.50, "Tires"}};
// ^^^^^^^
但是当我尝试使用成员名称时,如第一个示例所示:
// Attempts to use member name, but fails the last one:
/* 3 */Acct acct3 = {.accnt = 100123, .acct_name = "Robert Baily", {acct3.purch.count = 15, acct3.purch.cash = 12.50, acct3.purch.item = "Tires"}};
// error occurs here -> ^
我收到此错误: 22, 131 error: array type 'char [50]' is not assignable
使用会员char item[50]; in
购买时`
我得到这个错误:22, 14 error: initializer element is not a compile-time constant
当使用成员char *item;
时Purchase
(注意只有一个版本item
是struct
任何时候的一部分,另一个被评论)
因此,总而言之,如果不使用/* 2 */
上述语句中的命名赋值语句,我可以初始化嵌套结构,但是当我尝试使用命名赋值时,如char []
语句中的类型所示/* 3 */
,它会失败。
char []
初始化 a或char *
当它是嵌套结构构造的内部结构的成员时,我缺少什么?
我正在使用CLANG
设置为 C99