Ok ale tablice elementów tworzysz na podstawie struktury, czyli jest to tablica struktur tak?
Każde menu to osobna tablica struktur ‘Menu’. Czyli z tego co widzę powinno wystarczyć zamienić strukturę na klasę i zrobić odpowiedni konstruktor.
– Dodane 15.06.2012 (Pt) 21:13 –
Ok, już wiem gdzie namieszałem wcześniej. Źle przypisywałem zmienne w konstruktorze (oj trzeba solidnie odświeżyć programowanie obiektowe).
W każdym razie przerobiłem kod tak żeby ze struktur otrzymać klasy i ogólnie wygląda to tak:
#include "StdAfx.h"
#include
using namespace std;
class MenuZ;
void submenu(class MenuZ *menu);
void crt(class MenuZ*) { cout<<"Create something"<
void add(class MenuZ*) { cout<<"Add something"<
void del(class MenuZ*) { cout<<"Delete something"<
void rptvert(class MenuZ*) { cout<<"Show verticaly"<
void rpthorz(class MenuZ*) { cout<<"Show horizontaly"<
void load(class MenuZ*) { cout<<"Load from file"<
void save(class MenuZ*) { cout<<"Save to file"<
const class MenuZ {
public:
const char *text;
void (*fun)(class MenuZ*);
class MenuZ *sub;
};
void submenu(class MenuZ *menu)
{
cout<
while(true)
{
cin.sync();
unsigned n=0;
class MenuZ *tmp=menu; //tmp wskazuje na MenuZ ktore zostalo przekazane do funkcji
while(tmp->fun) cout<<(++n)<<": "<<(tmp++)->text<
cout<<"0: "<text<
unsigned m;
if((cin>>m)&&(m<=n))
{
if(!m) break;
class MenuZ *tmp=menu+m-1;
tmp->fun(tmp->sub);
}
else
{
cin.clear();
cout<<"Nie ma takiej opcji"<
}
}
cout<
}
int main()
{
MenuZ MainMenu;
MainMenu.text="Dodaj";
MainMenu.fun=add;
// MainMenu.sub
submenu(MainMenu*);
return 0;
}
Na razie bez konstruktora. Sprawdziłem czy przypisania działają i wszystko jest ok. Obecnie natrafiłem na dwa problemy: Kompilator nie chce zbudować programu z linijką:
submenu(MainMenu*);
i w jaki sposób tworzyć menu tak jak robione jest to tutaj:
RptMenuZ[]=
{
{"Pionowo",rptvert},
{"Poziomo",rpthorz},
{"Wroc"},
},
MainMenuZ[]=
{
{"Nowy",crt},
{"Dodaj",add},
{"Usun",del},
// {"Pokaz (sub)",subMenuZ,RptMenuZ},
{"Wczytaj z pliku",load},
{"Zapisz do pliku",save},
{"Koniec"},
}
;