SF.*_*SF. 2 c++ struct initialization
该计划有多个阶段,一方面,我们可以选择一个新阶段.
struct PhaseChoice;
struct Phase {
PhaseChoice* choices;
};
struct PhaseChoice {
bool (*condition)();
Phase* newPhase;
};
Run Code Online (Sandbox Code Playgroud)
......这个前瞻性声明没问题.但我无法初始化它.
Phase phases[2] = {
{ choices_p0 },
{ choices_p1 }
}
PhaseChoice choices_p0[2] = {
{ condition_p0p1,
&phases[1] },
{ condition_p0again,
&phases[0] },
};
PhaseChoice choices_p1[2] = {
{ condition_p1p0,
&phases[0] },
{ condition_p1again,
&phases[1] },
};
Run Code Online (Sandbox Code Playgroud)
这显然是失败的,因为初始化phases[2]程序时仍然没有关于choices_p0或的线索choices_p1.如果我颠倒顺序,初始化choices_p0我会遇到&phases[1]尚未知的.
初始化这种结构的正确方法是什么?
可以轻而易举地解决宣布了choices_p0和choices_p1之前定义数组phases:
extern PhaseChoice choices_p0[2];
extern PhaseChoice choices_p1[2];
Phase phases[2] = {
{ choices_p0 },
{ choices_p1 }
};
PhaseChoice choices_p0[2] = { ... };
PhaseChoice choices_p1[2] = { ... };
Run Code Online (Sandbox Code Playgroud)
您需要extern声明的关键字,或者您定义数组.