Используйте передовые декларации
struct MenuOption;
class Menu{
public:
Menu(MenuOption optionlist[],int optioncount);
};
struct MenuOption {
string Text;
int Choice;
bool UseSubMenu;
Menu SubMenu;
};
Вам не нужно делать какие-либо элемент данных указатель. В приведенном выше фрагменте кода нет «рекурсивного бесконечного размера».
Независимо от этого, по-прежнему представляется хорошей идеей сделать это SubMenu
указателем. Потому что, похоже, не требуется подменю, не так ли? Поэтому вы должны использовать указатель, поскольку в противном случае член будет всегда быть меню и должен быть инициализирован. Указатель можно оставить неинициализированным или как нулевой указатель. Вы также можете использовать boost::optional<>
вместо
struct MenuOption {
string Text;
int Choice;
boost::optional<Menu> SubMenu;
};
Ах. В этом есть смысл. Я полностью забыл о рекурсивной бесконечной размерной структуре, которая создала бы. – Earlz