Использовать предварительные объявления
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;
};