IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

arbreMap dans un arbre map


Sujet :

C++

  1. #1
    Invité
    Invité(e)
    Par défaut arbreMap dans un arbre map
    Bonjour,
    j'ai un porbléme au niveau declaration d'un arbre map dans un arbre map
    voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class Inventaire{
     
      public:
        Inventaire();
        Inventaire(const Inventaire& inventaire);
       Inventaire& operator+=(const Inventaire&);
    private: 
     
       string nomIngrediensGlob;
      ArbreMap<int,int> listeInventaire;
       ArbreMap<string,listeInventaire> inventListeIngrediens;
    le code d'erreur est :
    inventaire.h:55:23: erreur: invalid use of non-static data member ‘Inventaire::listeInventaire’

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    typedef ArbreMap<int,int> listeInventaire peut-être?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre expérimenté

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Points : 1 418
    Points
    1 418
    Par défaut
    Et la ligne 55 elle est où ?

    En tout cas je prédis que tu fais un appel du style Inventaire::listeInventaire au lieu de faire Inventaire.listInventaire, ou encore si c'est dans l'implémentation de la classe Inventaire, /*this->*/listeInventaire
    Nullius in verba

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    typedef ArbreMap<int,int> listeInventaire peut-être?
    merci beaucoup
    sa compile

  5. #5
    Invité
    Invité(e)
    Par défaut
    oui sa compile
    mais au niveau l'operateur >> m'affiche
    ‘listeInventaire’ was not declared in this scope
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    std::istream& operator >> (std::istream& is, Inventaire& inventaire)
    {
       listeInventaire liste;
       inventaire.inventListeIngrediens.vider();
       std::string chaine;
       is >> chaine;
       while(is && chaine!="---"){
       int quantite, expiration;
       is >> quantite >> expiration;
       liste[chaine];
     
         inventListeIngrediens[chaine] = listeInventaire;
     // inventaire.inventListeIngrediens[chaine];
       std::cout << "chaine\t"<<  chaine << std::endl;
       is >> chaine;
       // std::cout << "quantite\t"<<  inventaire.inventListeIngrediens[chaine] << std::endl;
        }
        return is;
    donc j'Ai declaré
    listeInventaire liste;
    pour remplir l'arbre liste inventaire par les deux entrees Quantite et expiration
    puis j'ai l'Affecte dans l'Arbre inventaire

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    C'est normal, le typedef est défini à l'intérieur de la classe.
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    Inventaire::listeInventaire liste;
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Invité
    Invité(e)
    Par défaut
    voici la bonne solution la declaration d'un arbre map dans un arbre map
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ArbreMap<string,ArbreMap<int,int> > inventListeIngrediens;
    et dans la partie .cpp
    just
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    inventaire.inventListeIngrediens[chaine][expiration];

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par nejibos Voir le message
    voici la bonne solution la declaration d'un arbre map dans un arbre map
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ArbreMap<string,ArbreMap<int,int> > inventListeIngrediens;
    et dans la partie .cpp
    just
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    inventaire.inventListeIngrediens[chaine][expiration]=quantite;

  9. #9
    Invité
    Invité(e)
    Par défaut
    maintenat j'ai un probleme au niveau operateur *=

    sachant l'operateur >> est fonctionel , il donne le resulat parfaite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
    std::istream& operator >> (std::istream& is, Inventaire& inventaire)
    {
     
       inventaire.inventListeIngrediens.vider();
       std::string chaine;
       is >> chaine;
       while(is && chaine!="---"){
       int quantite, expiration;
        is >> quantite >> expiration;
     
       //std::cout << "quantiet fichier\t"<<  quantite<< expiration<< std::endl;
     
       inventaire.inventListeIngrediens[chaine][expiration]=quantite;
       std::cout << "chaine1\t"<<  chaine << std::endl;
       std::cout << "quantite \t"<<  inventaire.inventListeIngrediens[chaine] [expiration] << std::endl;
       is >> chaine;
     
        }
        return is;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Inventaire& Inventaire::operator+=(const Inventaire& autre)
    {
        Inventaire &inv(*this);
     
        inv += autre;
       cout << "invbase\t"<< inv.inventListeIngrediens[nomIngrediensGlob][expiration]<< std::endl;
       cout << "\nautre \t"<< autre.inventListeIngrediens[nomIngrediensGlob][expiration]<< std::endl;
        return inv;
     
    }

  10. #10
    Membre expérimenté

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Points : 1 418
    Points
    1 418
    Par défaut
    Il faut s'impliquer un peu plus sur les messages, il suffit pas de balancer du code et de dire "alors?". En plus il y a des incohérences ; dur de comprendre.
    Nullius in verba

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Kaamui Voir le message
    il faut s'impliquer un peu plus sur les message, il suffit pas de balancer du code et de dire "alors?". En plus y'a des incohérences ; dur de comprendre.
    desoler,
    le probleme je veux ajouter des inventaires a une liste d'inventaire

    arbre map d'inventaire est la suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ArbreMap<string,ArbreMap<int,int> > inventListeIngrediens;
    nous avons l'operateur += appeler a partir du main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            Inventaire inventairerecu;
                 *entree >> inventairerecu;
     
     
                 inventaire += inventairerecu;
    maintenat l'operateur += dans la classe Inventaire.cpp ou j'ai trouve des lacunes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Inventaire& Inventaire::operator+=(const Inventaire& autre)
    {
        Inventaire &inv(*this);
        cout << "invbase\t"<< inv.inventListeIngrediens[nomIngrediensGlob][expiration]<< std::endl;
       // cout << "\nautre \t"<< autre.inventListeIngrediens[nomIngrediensGlob][expiration]<< std::endl;
    	inv.inventListeIngrediens[autre.cle()][autre.valeur()] ;
     
    //inv.inventListeIngrediens[nomIngrediensGlob][expiration] += autre.inventListeIngrediens  [nomIngrediensGlob][expiration];
        //inv += autre;
     
       cout << "invbase\t"<< inv.inventListeIngrediens[nomIngrediensGlob][expiration]<< std::endl;
       cout << "\nautre \t"<< autre.inventListeIngrediens[nomIngrediensGlob][expiration]<< std::endl;
        return inv;
     
    }
    sachant que l'operateur >>

    est fonctionel et sa compile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    std::istream& operator >> (std::istream& is, Inventaire& inventaire)
    {
     
       inventaire.inventListeIngrediens.vider();
       std::string chaine;
       is >> chaine;
       while(is && chaine!="---"){
       int quantite, expiration;
        is >> quantite >> expiration;
     
       //std::cout << "quantiet fichier\t"<<  quantite<< expiration<< std::endl;
     
       inventaire.inventListeIngrediens[chaine][expiration]=quantite;
       std::cout << "chaine1\t"<<  chaine << std::endl;
       std::cout << "quantite \t"<<  inventaire.inventListeIngrediens[chaine][expiration] << std::endl;
       is >> chaine;
     
        }
        return is;
    }

  12. #12
    Invité
    Invité(e)
    Par défaut
    je suis entrain de trouver la solution via un itérateur mais tjr il ya des problemes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
     
    Inventaire& Inventaire::operator+=(const Inventaire& autre)
    {
      Inventaire &inv=(*this); 
      ArbreMap<string,ArbreMap<int,int> > ::Iterateur iter=(*this).inventListeIngrediens.debut();
     
      while(iter) { 
       cout << "* " << *iter.cle() << *iter.valeur() << std::endl;
        iter++ ;
     
      }
     
     
     
        inv += autre;
     
        return inv;
     
    }

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Inventaire& Inventaire::operator+=(const Inventaire& autre)
    {
        Inventaire &inv=(*this); 
     
        //(snip)
     
        inv += autre;
     
        return inv;
    }
    Te rends-tu compte que ce code appelle récursivement Inventaire::operator+= jusqu'à ce que la pile explose?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #14
    Invité
    Invité(e)
    Par défaut
    bon je changer l'idee avec des iterateurs
    [/code]
    Inventaire& Inventaire::operator+=(const Inventaire& autre)
    {

    ArbreMap<string,ArbreMap<int,int> > ::Iterateur iter=(*this).inventListeIngrediens.debut();
    ArbreMap<string,ArbreMap<int,int> > ::IterateurConst iterAutre= autre.inventListeIngrediens.debut();

    string cleIter = iter.cle();
    string cleIterAutre =iterAutre.cle();


    ArbreMap<int,int> listeIter = iter.valeur();
    ArbreMap<int,int> listeIterAutre = iterAutre.valeur();

    ArbreMap<int,int> ::Iterateur iter2=listeIter.debut();

    ArbreMap<int,int> ::Iterateur iterAutre2=listeIterAutre.debut();


    int cleIter2 = iter2.cle();
    int valeurIter2 = iter2.valeur();


    while(iter) {



    std:: cout << "iter1 " << cleIter << std::endl;
    while(iter2) {
    cout << "iter2 "<< cleIter2 << valeurIter2<< std::endl;

    // je pense ce ici de faire le travail +=
    // inv.........
    iter2 ++;
    }
    iter++ ;



    }



    return *this;

    }
    [/code]
    mais ........

  15. #15
    Invité
    Invité(e)
    Par défaut
    voila la solution
    Dernière modification par Invité ; 19/03/2013 à 05h32. Motif: solution fausse

  16. #16
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    J'ai du mal à comprendre pourquoi tu itères l'arbre de destination.

    Ton opérateur +=, il sert bien à ajouter toutes les valeurs de l'arbre source à l'arbre de destination, non?
    Cela doit-il se passer sur un seul niveau ou sur les deux?
    Et que se passe-t-il quand une clé complète (string+int) existe déjà dans la destination? Doit-on ou non écraser la valeur existante?

    Il est indispensable de spécifier correctement ce que doit faire l'opérateur avant de l'implémenter.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  17. #17
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    J'ai du mal à comprendre pourquoi tu itères l'arbre de destination.

    Ton opérateur +=, il sert bien à ajouter toutes les valeurs de l'arbre source à l'arbre de destination, non?
    Cela doit-il se passer sur un seul niveau ou sur les deux?
    Et que se passe-t-il quand une clé complète (string+int) existe déjà dans la destination? Doit-on ou non écraser la valeur existante?

    Il est indispensable de spécifier correctement ce que doit faire l'opérateur avant de l'implémenter.
    merci juste un un seul itérateur fiat l'affaire

  18. #18
    Nouveau Candidat au Club
    Homme Profil pro
    etudiant
    Inscrit en
    Novembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Le Mrs qui à réalisé ce projet est ce qu'il peut me répondre je réalise meme projet et je trouve des lacunes.
    Merci de me répondre

    CDLT;

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 11
    Points : 7
    Points
    7
    Par défaut khaled nouri
    meme moi aussi je suis entrain de faire ce TP vraiment il y a bcp des truc a faire

  20. #20
    Nouveau Candidat au Club
    Homme Profil pro
    etudiant
    Inscrit en
    Novembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Khaled on peut s'aider si tu es interesse.. j'ai fait une partie mais je suis bloque mnt

Discussions similaires

  1. Déplacement d'un élément dans un arbre intervallaire
    Par Larson dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 17/09/2008, 15h57
  2. Réponses: 2
    Dernier message: 27/09/2005, 17h26
  3. [XSLT] Mesurer la profondeur d'un element dans un arbre
    Par Floyd dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 25/09/2005, 19h35
  4. Libérer des pointeurs dans une std::map
    Par GaldorSP dans le forum SL & STL
    Réponses: 2
    Dernier message: 09/07/2005, 14h42
  5. trii par odre alphabetique dans un arbre
    Par matt92700 dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 13/01/2005, 22h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo