À droite, je suis assez nouveau pour C++ alors je continue d'apprendre ici. Si je vais à ce sujet dans le mauvais sens alors dites-moi, mais essayez de me diriger dans la bonne direction si possible (perhpaps avec un lien vers un tutoriel).C++ stocker des objets dérivés dans une carte
Je joue avec std :: map et je l'ai utilisé pour stocker un objet (item). Cela fonctionne bien. Le problème est d'essayer de stocker des éléments dérivés dans la carte. Je l'ai fait fonctionner mais il semble trancher l'objet dérivé.
Donc disons que l'item a les attributs a, b et c. et la nourriture est dérivée de l'item avec les attributs supplémentaires d et e. Je ne peux pas accéder à d et e quand il est stocké dans une carte d'éléments. Le compilateur dit:
« Erreur: « élément de classe » n'a pas nommé membre « d » »
Est-il possible d'utiliser polymorphicaly std :: carte ou dois-je utiliser une autre bibliothèque comme coup de pouce? Boost semble plutôt complexe et j'espérais qu'il y avait un moyen de le faire avec map pendant que j'apprends encore. Voici une partie du code avec lequel je joue pour clarifier ce que je veux dire.
Carte des articles est déclarée comme si:
typedef std::map <int, tItem*> itemMap;
Les choses y sont ajoutés comme ceci:
Item * item = new Item (a, b, c);
itemmap [vnum] = item;
DerivedItem * deriveditem = new DerivedItem (a, b, c, d, e);
itemmap [vnum] = deriveditem;
Cela fonctionne, mais je ne peux pas accéder à d et e de l'élément dérivé.
Merci pour l'aide les gars
Tout cela sera un terrible cauchemar de fuite de mémoire. Vous devriez utiliser des pointeurs intelligents à la place. –
Je l'utilise pour apprendre, les éléments de la carte ne sont pas supprimés tant que le programme n'est pas fermé, donc il ne devrait pas y avoir de fuite de mémoire. – DizzyDuke