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 :

classe, map ou structure?


Sujet :

C++

  1. #1
    Membre habitu�
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 13
    Par d�faut classe, map ou structure?
    Bonjour et Joyeux Noel en retard!!

    Je butes depuis une semaine sur un probl�me de conception de structures et l'utilisation de C++.
    J'ai deux classes (Matiere et Recette) qui h�rite de ma classe Ingredient et d'autre part j'ai une classe Quantite qui est une classe abstraite.
    Recette est constitu�e de composants qui sont en fait une composition d'Ingredient et de Quantite.
    Au d�but j'ai donc cr�� une classe Composant, avec un attribut de type Ingredient et une autre de type Quantite, et Recette contenant un vector Composant*. Cela marchait tr�s bien.
    Mais dans mes composant il fallait qu'� un ingr�dient corresponde une quantit� et que je puisse acc�der � ces attributs pour faire une comparaison avec un stock de composants.
    J'ai donc voulu utiliser une map<Ingredient*,Quantite*>, mais une erreur de segmentation survenait.
    Je suis alors pass� � une structure composant avec un attribut de type Ingredient& et un Quantite& et cela ne fonctionne toujours pas (je ne comprends m�me pas l'erreur!).

    Je ne sais plus quoi utiliser pour r�soudre mon probl�me.Ou il y a t il une mani�re pr�cise d'utiliser la map?ou la structure?

    Merci d'avance pour vos suggestions.

  2. #2
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par d�faut
    Qu'est-ce qui ne marche pas exactement ?
    Un probl�me de compilation, de mod�lisation, d'ex�cution ?

  3. #3
    Membre exp�riment�
    Profil pro
    Dev
    Inscrit en
    D�cembre 2007
    Messages
    191
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Dev

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 191
    Par d�faut
    J'ai deux classes (Matiere et Recette) qui h�rite de ma classe Ingredient et d'autre part j'ai une classe Quantite qui est une classe abstraite.
    une relation d'h�ritage peut se traduire habituellement en fran�ais par un "classe fille" est un "classe m�re". Je comprend mal Recette est un ingr�dient. Veux-tu dire qu'une recette a des ingr�dients (c'est � dire Recette poss�de des objets membres ingr�dients) ?


    De plus si quantit� est une classe abstraite tu en peux pas l'instancier, donc pas d'objets possibles, donc tu va difficilement pouvoir faire une map avec.

    Sais-tu vraiment ce qu'est une map ?

  4. #4
    Membre exp�riment�
    Profil pro
    Dev
    Inscrit en
    D�cembre 2007
    Messages
    191
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Dev

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 191
    Par d�faut
    Citation Envoy� par falynne Voir le message
    Au d�but j'ai donc cr�� une classe Composant, avec un attribut de type Ingredient et une autre de type Quantite
    ne devrais-tu pas justement faire h�riter ton composant de ingr�dient et quantit� ? comme je le lis �a a plus de sens (mais ce n'est que mon avis bien sur... )

  5. #5
    Membre habitu�
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 13
    Par d�faut
    C'est un probl�me de compilation, j'utilise normalement la map ou la structure mais cela ne fonctionne pas.

    Une recette est un ingredient, puisqu'elle est une classe fille d'ingredient, mais elle utilise aussi des ingr�dients,ce qui ve dire qu'une recette peut utiliser une recette comme un de ces ingr�dients.
    Ma classe Quantit� est effectivement une classe abstraite mais qui a comme classes filles Litre,Gramme et Unite.
    Mais si je veux des composants (qui vont constitu�s ma recette),ingredients associ�s � des quantit�s, je suis oblig� d'utiliser ma classe quantit�?

  6. #6
    Membre habitu�
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 13
    Par d�faut
    ne devrais-tu pas justement faire h�riter ton composant de ingr�dient et quantit� ? comme je le lis �a a plus de sens (mais ce n'est que mon avis bien sur... )
    je ne sais pas comment est ce que cela se passe dans ce cas, peux tu me l'expliquer s'il te plait, parce que d'apr�s mon diagramme mon composant est une association d'Ingredient et quantite.

  7. #7
    Membre exp�riment�
    Profil pro
    Dev
    Inscrit en
    D�cembre 2007
    Messages
    191
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Dev

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 191
    Par d�faut
    Citation Envoy� par falynne Voir le message
    Une recette est un ingredient, puisqu'elle est une classe fille d'ingredient, mais elle utilise aussi des ingr�dients,ce qui ve dire qu'une recette peut utiliser une recette comme un de ces ingr�dients.
    ah oui, si on peut r�utiliser une pr�paration comme ingr�dient je comprend en effet.

    Citation Envoy� par falynne Voir le message
    je ne sais pas comment est ce que cela se passe dans ce cas, peux tu me l'expliquer s'il te plait, parce que d'apr�s mon diagramme mon composant est une association d'Ingredient et quantite.
    pour faire d�river une classe de plusieurs autres, c'est tr�s simple :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    class Base1 {};
    class Base2 {};
     
    class Derivee : public Base1, public Base2 {};
    Faut faire gaffe aux noms qui se marchent sur les pieds.

  8. #8
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par d�faut
    Citation Envoy� par Pacorabanix Voir le message
    une relation d'h�ritage peut se traduire habituellement en fran�ais par un "classe fille" est un "classe m�re". Je comprend mal Recette est un ingr�dient. Veux-tu dire qu'une recette a des ingr�dients (c'est � dire Recette poss�de des objets membres ingr�dients) ?


    De plus si quantit� est une classe abstraite tu en peux pas l'instancier, donc pas d'objets possibles, donc tu va difficilement pouvoir faire une map avec.

    Sais-tu vraiment ce qu'est une map ?

    Beh si , c'est le principe m�me du polymorphisme.

  9. #9
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par d�faut
    Citation Envoy� par falynne Voir le message
    C'est un probl�me de compilation, j'utilise normalement la map ou la structure mais cela ne fonctionne pas.

    Une recette est un ingredient, puisqu'elle est une classe fille d'ingredient, mais elle utilise aussi des ingr�dients,ce qui ve dire qu'une recette peut utiliser une recette comme un de ces ingr�dients.
    Ma classe Quantit� est effectivement une classe abstraite mais qui a comme classes filles Litre,Gramme et Unite.
    Mais si je veux des composants (qui vont constitu�s ma recette),ingredients associ�s � des quantit�s, je suis oblig� d'utiliser ma classe quantit�?
    Ce serait possible d'avoir la partie du code qui plante et les erreurs du compilateur svp ?

  10. #10
    Membre habitu�
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 13
    Par d�faut
    Recette.h
    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
    23
    24
    25
    26
    27
    28
     
    #ifndef RECETTE_H
     
    #define RECETTE_H
     
     
     
    #include <iostream>
     
    #include <string>
    #include <vector>
    #include <map>
    #include "ingredient.h"
    #include "quantite.h"
    #include "exception_recette_multiple.h"
    class Recette : public Ingredient{
     
       private:
     
          std::string _explication; // corps de la recette
          int _tpsPreparation; // temps de la préparation de la recette
          Quantite& _parts; // composant de la recette
          typedef std::map<Ingredient&,Quantite&> Composant;
          std::vector<Composant*> ContComposant;// conteneur de composants
          int tps;
      public:
          void afficher(std::ostream&) const;
          void ajouter_composant(Quantite&,Ingredient&);
    Recette.cpp
    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
    23
    24
     
    void Recette::ajouter_composant(Quantite& q,Ingredient& i) {
     
    	tps=tps + i.temps_de_preparation();
            Composant ct;
    	ct[i]=q;
    	ContComposant.push_back(&ct);
     
    	//ContComposant.push_back(new composant(i,q));
     
    }
     
    void Recette::afficher(ostream& os) const{
     
    	os << Ingredient::nom() << " " << "(" << _parts << "," << " " << tps << " " <<"minutes" << ")" << endl;
     
    	for (int i=0;i<ContComposant.size();++i){
    		 os << *ContComposant[i];
     
    	}
     
    	os << _explication<< endl;
     
    }
    erreur:
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    /usr/include/c++/4.1.3/bits/stl_function.h: In instantiation of «std::less<Ingredient&>":
    /usr/include/c++/4.1.3/bits/stl_tree.h:400:   instantiated from «std::_Rb_tree<Ingredient&, std::pair<Ingredient&, Quantite&>, std::_Select1st<std::pair<Ingredient&, Quantite&> >, std::less<Ingredient&>, std::allocator<std::pair<Ingredient&, Quantite&> > >::_Rb_tree_impl<std::less<Ingredient&>, false>"
    /usr/include/c++/4.1.3/bits/stl_tree.h:437:   instantiated from «std::_Rb_tree<Ingredient&, std::pair<Ingredient&, Quantite&>, std::_Select1st<std::pair<Ingredient&, Quantite&> >, std::less<Ingredient&>, std::allocator<std::pair<Ingredient&, Quantite&> > >"
    /usr/include/c++/4.1.3/bits/stl_map.h:134:   instantiated from «std::map<Ingredient&, Quantite&, std::less<Ingredient&>, std::allocator<std::pair<Ingredient&, Quantite&> > >"
    recette.cpp:61:   instantiated from here
    /usr/include/c++/4.1.3/bits/stl_function.h:226: erreur: forming reference to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_tree.h: In instantiation of «std::_Rb_tree<Ingredient&, std::pair<Ingredient&, Quantite&>, std::_Select1st<std::pair<Ingredient&, Quantite&> >, std::less<Ingredient&>, std::allocator<std::pair<Ingredient&, Quantite&> > >":
    /usr/include/c++/4.1.3/bits/stl_map.h:134:   instantiated from «std::map<Ingredient&, Quantite&, std::less<Ingredient&>, std::allocator<std::pair<Ingredient&, Quantite&> > >"
    recette.cpp:61:   instantiated from here
    /usr/include/c++/4.1.3/bits/stl_tree.h:488: erreur: forming reference to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_tree.h:512: erreur: forming reference to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_tree.h:1211: erreur: forming reference to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_tree.h:1301: erreur: forming pointer to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_tree.h:1311: erreur: forming reference to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_tree.h:1332: erreur: forming reference to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_tree.h:1354: erreur: forming reference to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_tree.h:1365: erreur: forming reference to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_tree.h:1383: erreur: forming reference to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_tree.h:1401: erreur: forming reference to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_tree.h:1419: erreur: forming reference to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_tree.h:1440: erreur: forming reference to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_tree.h:1450: erreur: forming reference to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_map.h: In instantiation of «std::map<Ingredient&, Quantite&, std::less<Ingredient&>, std::allocator<std::pair<Ingredient&, Quantite&> > >":
    recette.cpp:61:   instantiated from here
    /usr/include/c++/4.1.3/bits/stl_map.h:340: erreur: forming reference to reference type «Quantite&"
    /usr/include/c++/4.1.3/bits/stl_map.h:362: erreur: forming reference to reference type «Quantite&"
    /usr/include/c++/4.1.3/bits/stl_map.h:371: erreur: forming reference to reference type «Quantite&"
    /usr/include/c++/4.1.3/bits/stl_map.h:460: erreur: forming reference to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_map.h:533: erreur: forming reference to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_map.h:548: erreur: forming reference to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_map.h:560: erreur: forming reference to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_map.h:575: erreur: forming reference to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_map.h:590: erreur: forming reference to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_map.h:600: erreur: forming reference to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_map.h:610: erreur: forming reference to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_map.h:629: erreur: forming reference to reference type «Ingredient&"
    /usr/include/c++/4.1.3/bits/stl_map.h:648: erreur: forming reference to reference type «Ingredient&"
    recette.cpp:68: erreur: expected constructor, destructor, or type conversion before «&" token
    recette.cpp: In member function «void Recette::ajouter_composant(Quantite&, Ingredient&)":
    recette.cpp:113: erreur: no match for «operator[]" in «ct[i]"
    recette.cpp: In member function «virtual void Recette::afficher(std::ostream&) const":
    recette.cpp:130: erreur: no match for «operator<<" in «os << *(std::map<Ingredient&, Quantite&, std::less<Ingredient&>, std::allocator<std::pair<Ingredient&, Quantite&> > >*)((const Recette*)this)->Recette::ContComposant.std::vector<_Tp, _Alloc>::operator[] [with _Tp = std::map<Ingredient&, Quantite&, std::less<Ingredient&>, std::allocator<std::pair<Ingredient&, Quantite&> > >*, _Alloc = std::allocator<std::map<Ingredient&, Quantite&, std::less<Ingredient&>, std::allocator<std::pair<Ingredient&, Quantite&> > >*>](((unsigned int)i))"
    /usr/include/c++/4.1.3/bits/ostream.tcc:67: note: candidats sont: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>& (*)(std::basic_ostream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.1.3/bits/ostream.tcc:78: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ios<_CharT, _Traits>& (*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.1.3/bits/ostream.tcc:90: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::ios_base& (*)(std::ios_base&)) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.1.3/bits/ostream.tcc:241: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.1.3/bits/ostream.tcc:264: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.1.3/bits/ostream.tcc:102: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(bool) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.1.3/bits/ostream.tcc:125: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.1.3/bits/ostream.tcc:157: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.1.3/bits/ostream.tcc:183: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.1.3/bits/ostream.tcc:215: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.1.3/bits/ostream.tcc:288: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long long int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.1.3/bits/ostream.tcc:311: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long long unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.1.3/bits/ostream.tcc:361: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(double) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.1.3/bits/ostream.tcc:335: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(float) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.1.3/bits/ostream.tcc:384: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long double) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.1.3/bits/ostream.tcc:407: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(const void*) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.1.3/bits/ostream.tcc:430: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_streambuf<_CharT, _Traits>*) [with _CharT = char, _Traits = std::char_traits<char>]
    recette.h:112: note:                 std::ostream& operator<<(std::ostream&, const Recette&)
    ingredient.h:37: note:                 std::ostream& operator<<(std::ostream&, const Ingredient&)
    quantite.h:16: note:                 std::ostream& operator<<(std::ostream&, const Quantite&)
    /usr/include/c++/4.1.3/bits/stl_pair.h: At global scope:
    /usr/include/c++/4.1.3/bits/stl_pair.h: In instantiation of «std::pair<Ingredient&, Quantite&>":
    /usr/include/c++/4.1.3/bits/stl_tree.h:135:   instantiated from «std::_Rb_tree_node<std::pair<Ingredient&, Quantite&> >"
    /usr/include/c++/4.1.3/bits/stl_tree.h:1264:   instantiated from «void std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_erase(std::_Rb_tree_node<_Val>*) [with _Key = Ingredient&, _Val = std::pair<Ingredient&, Quantite&>, _KeyOfValue = std::_Select1st<std::pair<Ingredient&, Quantite&> >, _Compare = std::less<Ingredient&>, _Alloc = std::allocator<std::pair<Ingredient&, Quantite&> >]"
    /usr/include/c++/4.1.3/bits/stl_tree.h:578:   instantiated from «std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::~_Rb_tree() [with _Key = Ingredient&, _Val = std::pair<Ingredient&, Quantite&>, _KeyOfValue = std::_Select1st<std::pair<Ingredient&, Quantite&> >, _Compare = std::less<Ingredient&>, _Alloc = std::allocator<std::pair<Ingredient&, Quantite&> >]"
    /usr/include/c++/4.1.3/bits/stl_map.h:93:   instantiated from here
    /usr/include/c++/4.1.3/bits/stl_pair.h:84: erreur: forming reference to reference type «Quantite&"
    make: *** [recette.o] Erreur 1

  11. #11
    Membre exp�riment�
    Profil pro
    Dev
    Inscrit en
    D�cembre 2007
    Messages
    191
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Dev

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 191
    Par d�faut
    Citation Envoy� par ep31 Voir le message
    Beh si , c'est le principe m�me du polymorphisme.
    euhhh oui pardon je vais vite partir en courant par la fenetre... je vous retrouve en bas

  12. #12
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par d�faut
    Bon, d�j�, il y a un lien de composition entre Recette et Ingredient (via le vector de map<>) donc je ne vois pas pourquoi ta classe Recette h�rite de Ingredient.
    Mais cela n'explique pas l'erreur.

    La ligne :
    me semble �trange,
    cela revient � vouloir conna�tre le contenu du i�me �l�ment de ton vector de composants qui se trouve �tre un �l�ment de type map et donc le i�me �l�ment de ton tableau de map.
    En �crivant :
    n'aurais-tu pas moins d'erreurs ?

  13. #13
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par d�faut
    Citation Envoy� par Pacorabanix Voir le message
    euhhh oui pardon je vais vite partir en courant par la fenetre... je vous retrouve en bas
    La chute n'a pas �t� trop douloureuse ?

  14. #14
    Membre habitu�
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 13
    Par d�faut
    Non, je viens d'essayer, cela ne fonctionne pas.


    Au d�but de mon impl�mentation, j'avais cr�� tout simplement une classe Composant et dans ma classe recette j'avais mis std::vector<Composant*> ContComposant;.
    Pour l'affichage j'ai donc mis [I]os << *ContComposant; pour avoir le contenu d�f�renc� de mon vector et donc avoir des composants et ma compilation marchait.
    Mais depuis que j'ai voulu impl�menter mes composants comme �tant typedef std::map<Ingredient&,Quantite&> Composant; cela ne fonctionne plus.

  15. #15
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par d�faut
    Bizarre, je ne vois pas de probl�me a priori.
    Et en d�clarant un :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    std::vector<std::map<Ingredient&,Quantite&>*> ContComposant;
    tu as la m�me erreur ?

  16. #16
    Membre habitu�
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 13
    Par d�faut
    Non, cela ne marche toujours pas

  17. #17
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par d�faut
    ok, je crois voir d'o� vient l'erreur.
    Dans la fonction :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void Recette::ajouter_composant(Quantite& q,Ingredient& i) {
     
    	tps=tps + i.temps_de_preparation();
            Composant ct;
    	ct[i]=q;
    	ContComposant.push_back(&ct);
     
    	//ContComposant.push_back(new composant(i,q));
     
    }
    Tu d�clares un Composant local � ta fonction qui n'est autre qu'un typedef de ta map. Il sera donc perdu � la sortie de ajouter_composant car le push_back de ta r�f�rence de ct n'utilisera pas de constructeur de recopie (d'ailleurs c'est une map d'objets abstracts donc...).
    Et tu associes � ton Composant une Quantite par :
    alors qu'un Composant est une map d'Ingredient, Quantite.

    Cela fait un moment que je n'ai pas touch� � C++ mais quelque-chose du style :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void Recette::ajouter_composant(Quantite& q,Ingredient& i) {
     
    	tps=tps + i.temps_de_preparation();
                 Composant* ct = new Composant<q,i>;
    	ContComposant.push_back(ct);
     
    	//ContComposant.push_back(new composant(i,q));
     
    }
    devrait mieux marcher (enfin je pense )

  18. #18
    Membre habitu�
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 13
    Par d�faut
    �a ne marche toujours pas.
    Je penses que je vais laisser tomber la map et faire une classe avec des accesseurs tout b�te.
    Merci pour le temps que tu as pass� sur mon probl�me.

Discussions similaires

  1. R�ponses: 0
    Dernier message: 16/09/2009, 17h28
  2. Probl�me avec la classe Map
    Par djorfe dans le forum Collection et Stream
    R�ponses: 5
    Dernier message: 10/06/2008, 09h10
  3. classe map et affectation
    Par alexadvance dans le forum C++
    R�ponses: 11
    Dernier message: 07/03/2007, 15h31
  4. contenu de classe ou de structure modifiable ?
    Par legend666 dans le forum C++
    R�ponses: 12
    Dernier message: 10/10/2005, 02h56

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