Fonctions Imbriquées avec argument string

Signaler
Messages postés
59
Date d'inscription
lundi 21 août 2006
Statut
Membre
Dernière intervention
17 juillet 2009
-
Messages postés
59
Date d'inscription
lundi 21 août 2006
Statut
Membre
Dernière intervention
17 juillet 2009
-
Bonjours,

J'esaye de programmer deux classes de menu. L'architecture est la suivantes :
Une classe Menu
class Menu
{
public:
    Menu(void);
    ~Menu(void);

    //fonctions membres
    void Display(int idMnu);
    void Display(void);
    void AddSubMnu(int idMnu,string vName);
    void AddMnu(string vName);

    //Variables
    string Name[10];
    int NbMnu;
    SubMenu SubMnu[10];
};

Une classe SubMenu
class SubMenu
{
public:
    //Constructeur et destructeur
    SubMenu(void);
    ~SubMenu(void);

    //Fonctions Membres
    void Display(void);
    void AddMenu(string vName);

    //Variables membres
    string    Name[10];                //Nom du menu
    int NbMnu;
};

avec :
void SubMenu::AddMenu(string vName)
{
    Name[NbMnu] = vName;
    NbMnu +=1;

    if(NbMnu>9)
        NbMnu=9;
}
et :
void Menu::AddSubMnu(int idMnu, string vName)
{
    Mnu[idMnu].AddMenu(vName);
}

si je fais :
int main(void)
{
    Menu Mnu;
    SubMenu  m;
    m.AddMenu("Chaine");                Ok Ca marche
    Mnu.AddSubMnu(2,"Chaine");     Ca ne marche pas -> Une exeption est crée

    return 0;
}

En gros lorsque j'appelle la fonction AddMenu de la classe SubMenu directement ca marche mais si je fais un appelle a cette même fonction par l'intermédiaire de la classe Menu ca marche plus ??????
J'ai remplacer les string par des int pour voir ce que cela donnait, et la ca marche. Quelqu'un pourais t il m'aider ??

Merci
Damien
<hr size="2" width="100%" />*Les fautes d'orthographes jointes à la présente missive, sont la propriété exclusive de l'auteur. Toute copie illégale pourra être passive de poursuites judiciaires, et soumises à des peines et sanctions exemplaires

2 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
void Menu::AddSubMnu(int idMnu, string vName)
{
    Mnu
[idMnu].AddMenu(vName);
}

Le membre Mnu n'existe pas dans la classe Menu, c'est quoi ?

Je me permets une remarque, un sous-menu EST aussi un menu. Donc distinguer "Menu" et "Sous-Menu" ne me parait pas adapté. La classe SubMenu ne devrait pas exister.
Messages postés
59
Date d'inscription
lundi 21 août 2006
Statut
Membre
Dernière intervention
17 juillet 2009

J'ai mal geré le copier coller, la vrai fonction est :



void Menu::AddSubMnu(int idMnu, string vName)
{
    SubMnu
[idMnu].AddMenu(vName);
}

Concernant ta remarque, au debut je voulais gerer les menus avec un tableau de char à deux dimension : char Menu[10][10]. Le premier indice permet de gerer les 10 menus de plus haut niveau et le deuxieme indice permet de gerer les sous menu. A cela il falait ajouter une alloc dynamique pour le tableau de la chaine de caractère. Je débarque dans le C++ alors je te raconte pas la galère que c'était pour moi de gérer cette organisation. De plus elle ne me permetait pas de gérer le nom des menus principaux. J'ai donc rajouté la classse SubMenu puis je suis passé sur les string, ce qui me permétait de ne pas fair d'allocation.

sinon je suis maintenant passé sur une autre structure, j'ai une classe Menu avec comme membre, le nom, l'indice du parent et le niveau. J'ai une deuxième classe lstMenu qui contient un tableau de Menu. Je pense que c'est plus propre.

Le probléme qui a fait l'objet de ce topic n'est donc plus d'atualité cependant j'aimerais bien savoir pourquoi ca bugais, histoire de pouvoir réagir si je tombe à nouveau dessus.

Voila merci de ton aide
Damien

<hr size="2" width="100%" />*Les fautes d'orthographes jointes à la présente missive, sont la propriété exclusive de l'auteur. Toute copie illégale pourra être passive de poursuites judiciaires, et soumises à des peines et sanctions exemplaires.