初始化两个引用彼此的结构数组

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]尚未知的.

初始化这种结构的正确方法是什么?

Som*_*ude 6

可以轻而易举地解决宣布choices_p0choices_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声明的关键字,或者您定义数组.