当非复制元素也存在时,我们如何初始化具有复制的结构队列?我尝试了以下方法但没有成功。有可能吗?
typedef struct {
A a;
B b;
C c;
D d;
} lp_s; //A,B,C,D : integer enums
lp_s var_name[$] = '{
'{a: A_VAL0, b: B_VAL1, default:0}
'{15{'{a: A_VAL1, b: B_VAL1, default:0}}},
'{a: A_VAL2, b: B_VAL2, default:0}
};
Run Code Online (Sandbox Code Playgroud)
这里的错误是:
分配模式非法,原因是:复制字段超出目标的大小
我从复制中删除了勾号。
lp_s var_name[$] = '{
'{a: A_VAL0, b: B_VAL1, default:0}
{15{'{a: A_VAL1, b: B_VAL1, default:0}}},
'{a: A_VAL2, b: B_VAL2, default:0}
};
Run Code Online (Sandbox Code Playgroud)
然后错误变成:
类型“lp_s”的解包结构不能通过多个
串联运算符 {15 {'{a: A_VAL1, b: B_VAL1, default:0}}}进行赋值
,但是可以将赋值模式分配给解包结构。在串联运算符之前添加 ' 以将其转换为有效的赋值模式。
或者有没有办法使用解压数组串联来实现?
您可以将显式类型添加到赋值模式,以便可以在自定义上下文中使用它。
typedef lp_s lp_sq[$];
lp_s vari[$] = { // unpacked array concatenation of struct assignment patterns
lp_s'{a: A_ENUM, b: B_ENUM, C: J_ENUM, D: D_ENUM},
lp_sq'{12{lp_s'{a: A_ENUM, b: B_ENUM, C: J_ENUM, D: D_ENUM}}},
lp_s'{a: A_ENUM, b: B_ENUM, C: J_ENUM, D: D_ENUM }
};
Run Code Online (Sandbox Code Playgroud)
请注意,您不能default:0在此处使用,因为0不是分配给enum.
| 归档时间: |
|
| 查看次数: |
3348 次 |
| 最近记录: |