Программа имеет несколько этапов, и, как результат, выбор сделан для выбора нового.Инициализация двух массивов структур, ссылающихся друг на друга
struct PhaseChoice;
struct Phase {
PhaseChoice* choices;
};
struct PhaseChoice {
bool (*condition)();
Phase* newPhase;
};
... это форвардная декларация работает нормально. Но мне не удается инициализировать его.
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] },
};
Это, очевидно, не удается, так как при инициализации phases[2]
программа еще не имеет понятия о choices_p0
или choices_p1
. Если я отменил порядок, инициализируя choices_p0
, я столкнусь с &phases[1]
, который пока неизвестен.
Каков правильный способ инициализации таких структур?
C или C++? Выбери один. Примечание: это не действительный код C. – Olaf
@Olaf: Будет ли решение отличаться между двумя языками? –
Результат компиляции будет отличаться окончательно: компилятор C сообщит об ошибке. Даже если вы сделаете это совместимым, для каждого языка есть разные способы. Просто повторить его: C и C++ - разные языки. Пока вы _can_ программируете C-like в C++, существуют тонкие различия для одного и того же синтаксиса. И _proper_ решения на любом языке значительно отличаются. – Olaf