I had to do a exercise with classes and this one had me do a circular dependency thing. anyway they pretty much had it step by step to be set like this:
#include <iostream>
#include <vector>
usingnamespace std;
class MenuItem;
class Menu
{
public:
Menu();
void add_menu_item(MenuItem Item);
int input();
private:
vector<MenuItem> submenu;
void display_menu();
};
class MenuItem
{
public:
MenuItem(string name);
void add_submenu(Menu submenu);
string get_name();
Menu get_submenu();
bool get_submenu_state();
private:
string name;
Menu submenus;
bool sub;
};
//---------------------------------------------
Menu::Menu()
{
}
void Menu::add_menu_item(MenuItem item)
{
submenu.push_back(item);
}
void Menu::display_menu()
{
for (int i = 0; i < submenu.size(); i++)
{
cout << i + 1 << ") " << submenu[i].get_name() << endl;
}
}
int Menu::input()
{
int option;
do
{
display_menu();
cin >> option;
} while (option < 1 || option > submenu.size());
if (submenu[option - 1].get_submenu_state())
{
return submenu[option - 1].get_submenu().input();
}
else
{
return option;
}
}
//-------------------------------------------------------
MenuItem::MenuItem(string name)
{
this->name = name;
sub = false;
}
void MenuItem::add_submenu(Menu submenu)
{
submenus = submenu;
sub = true;
}
string MenuItem::get_name()
{
return name;
}
Menu MenuItem::get_submenu()
{
return submenus;
}
bool MenuItem::get_submenu_state()
{
return sub;
}
//------------------------------------
int main()
{
Menu main_menu;
MenuItem file("file");
MenuItem newfile("new");
MenuItem save_as("save as");
MenuItem print("print");
Menu sub_menu;
//sub_menu.add_menu_item(file);
sub_menu.add_menu_item(newfile);
sub_menu.add_menu_item(save_as);
sub_menu.add_menu_item(print);
MenuItem edit("edit");
MenuItem window("window");
file.add_submenu(sub_menu);
main_menu.add_menu_item(file);
main_menu.add_menu_item(edit);
main_menu.add_menu_item(window);
main_menu.input();
return 0;
}
So why does this work in one class and not the other. The exercise said to declare class Menu; so i can use it in the MenuItem class. I just curious why it works when i do the reverse (class MenuItem; followed by declaring the Menu class).