je souhaite creer un vecteur contenant différents objets ayant tous des attributs differents. Je dois dans la suite de mon code recuperer la valeur des attributs des differents objets à partir de ce vecteur ! ce que je n'arrive pas à faire pour l'instant !
class Carte{}
class Creature: public Carte
{
//avec des attributs comme m_degat1
};
class Monstre: public Carte
{
//avec d'autres atttributs comme m_mochete1
};
vector <Carte*> test;
Creature *t1; //Je crée un pointeur du type de mon vecteur
t1=new Creature(); //je le "popinte sur un type créature
t1->Setm_degat1(20); //Je set ses degats à 20
test.push_back(t1); //Je l'ajoute à mon vecteur test
cout<<test[0]->Getm_degat1(); //Je tente d'afficher les degats de ma creatues rentrée precedemment
Le message d'erreur est toujours le même : "Class Carte* n'a pas d'attribut m_degat1" or je voudrai s que cette "case du vecteur devienne un type Creature.
Je pense que ton probléme vient du fais que tu initialises ton pointeur de type <vector> dans ta classe Carte elle même. Essaye de déclarer tous cela dans ta fonction main(). Sinon essaye d'utiliser le poiteur this pour retourner ta classe elle même. Et je ne crois pas qu'il soit possible de déclarrer des classes dans une classes.
Vous utilisez le type std::vector, et c'est bien, mais tout le reste sent les âneries qu'enseigne le cours calamiteux du C++ du cite OCR.
Utilisez des std::unique_ptr à la place des pointeurs nus tous pourris.
Vous ne devriez mettre dans un "std::vector<std::unique_ptr<Carte>>" que des cartes et des objets dérivés de Cartes.
Mais, une fois dans cette liste, vous devez faire le deuil des spécificités de chaque classe fille de carte.
Pourquoi une carte n'aurait-elle pas de dégâts ???
class Carte{
int degat_;
int defense_;
public :
Carte(int degat = 0; defense = 0):degat_{degat},defense_{defense}{}
int getDebat() const {return degat_;};
}
class Creature: public Carte
{
public:
Creature(int degat):Carte{degat}{}
};
class Monstre: public Carte
{
//avec d'autres atttributs comme m_mochete1
};
----
std::vector<unique_ptr<Carte>> test;
test.push_back(std::make_unique<Creature>(20));
cout<<test[0]->getDegat();
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
En plus de ce que dit bacelar, un petit scénario d'usage montre les limites de cette approche. Je mets des Creature, des Monstre et tout un tas d'autre cartes dans mon vector, puis pour mettre un peu de piment dans la partie, je mélange mon vector... Maintenant je prends la première carte du vector. Quel est le type réel de cette carte, est ce un Creature? est ce un Monstre? autre chose? Impossible de le savoir puisque j'ai tout mélangé (dans un jeu de carte physique, j'ai battu le jeu). On voit à travers cet expérience de pensée, qu'ici on n'a plus accès au type réel, seulement au type de base (un peu comme si j'avais tiré une carte sans la regarder, je sais que c'est une carte, mais pas de quelle carte il s'agit), donc seuls les services du type de base sont accessibles. Ton modèle se heurte à ce mur, tu n'as accès qu'à ce qui est exposé par la classe de base. Bien sur tu pourrais ajouter une fonction membre virtuelle à Carte pour accéder à m_mochete, au premier abord, cela pourrait sembler simple. Grossière erreur, la classe Creature n'ayant pas d'attribut m_mochete, cette fonction n'aurait aucun sens si elle est appelée sur un Creature, et plus tu vas avoir de type de cartes, plus tu vas devoir ajouter des fonctions de ce genre qui n'auront un sens que pour un petit nombre de type de carte, résultat, tu vas te retrouver avec une classe Carte avec des dizaines de fonctions qui ne servent presque à rien mais que tu es obligés d'avoir pour que ton château de cartes ne s'écroule pas, ça va très vite devenir ingérable.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Galérer est le succés de la réussite ;')