我的结构如下:
struct menu {
uint8_t type;
struct menuentry * parent;
struct displaystring * fixtexts[5];
// uint8_t ftnum;
struct menuentry * children;
uint8_t chnum;
uint8_t state;
uint8_t entry;
struct displaystring * selentrystr;
};
我制作了这些结构的数组:
struct menu gl_menlist[20]; // all menus
此处的作业失败:
gl_menlist[0].fixtexts={NULL, NULL, NULL, NULL, NULL};
错误是:
Testdisplayarbstring.ino: In function 'void setup()':
Testdisplayarbstring.ino:209: error: expected primary-expression before '{' token
Testdisplayarbstring.ino:209: error: expected `;' before '{' token
我意识到我的IDE实际上是使用c ++编译器来构建可执行文件。所以我用C ++标记它,而我的所有代码都只是C语言。 如果我将空括号添加到fixtexts,结果是类似的。
Dis0_10.ino: In function 'void setup()':
Dis0_10.ino:209: error: expected primary-expression before ']' token
Dis0_10.ino:209: error: expected primary-expression before '{' token
Dis0_10.ino:209: error: expected `;' before '{' token
目前我不知道......
答案 0 :(得分:1)
你说这实际上是C而不是C ++ ..
有两种选择。
1)memset
memset(gl_menlist[0].fixtexts, 0, sizeof(gl_menlist[0].fixtexts));
2)将数组包装在另一个结构中并使用编译器生成结构副本:
struct displaystring_fixed {
displaystring * a[5];
};
struct menu {
uint8_t type;
struct menuentry * parent;
struct displaystring_fixed fixtexts;
// uint8_t ftnum;
struct menuentry * children;
uint8_t chnum;
uint8_t state;
uint8_t entry;
struct displaystring * selentrystr;
};
static const displaystring_fixed displaystring_fixed_init = {NULL, NULL, NULL, NULL, NULL};
gl_menlist[0].fixtexts = displaystring_fixed_init;
在第二种情况下,编译器可能会生成块移动指令,但通常memset
也会得到很好的优化。在第二种情况下,您必须将displaystring_fixed[i]
的所有访问权限更改为displaystring_fixed.a[i]
。
答案 1 :(得分:0)
您可能需要menu
的构造函数,类似于(并使用nullptr
,而不是NULL
):
struct menu {
menu() : fixtexts{nullptr, nullptr, nullptr, nullptr, nullptr} ...
...