Vecteur et Polymorphisme

Signaler
Messages postés
13
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
10 juin 2009
-
Messages postés
13
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
10 juin 2009
-
Bonjour à tous,

Je suis en train de réaliser un petit jeu de rôle et je bloque sur un point :

Pour être clair, mon programme ne veut pas que Heros[2] attaque Heros[3] (Heros[imetier]->attaquer(Heros[2]);)


Déclaration dans la classe :

voidPersonnage::attaquer(Personnage&cible)
{
cible.recevoiregats(m_degatsarme);
}

Déclaration dans le main :

vector<Personnage*>Heros;

Guerrierguerrierheros("Nomheros");
Magicienmagicienheros("Nomheros");
Monstremechantmonstre();//On créé le monstre qui va être combattu

Heros.push_back(&magicienheros);//On pratique le polymorphisme
Heros.push_back(&guerrierheros);
Heros.push_back(&mechantmonstre);

Heros[imetier]->attaquer(Heros[2]);

En vous remerciant ^_^.

6 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Et donc, quelle est la question?

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
13
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
10 juin 2009

Ben.. mon programme ne veut pas que Heros[imetier] (imétier est soit 0, soit 1) attaque Heros[2] (qui est le monstre).
Il me dit :
Heros[imetier]->attaquer(Heros[2]);

no matching function for call to 'Personnage:attaquer(personnage*&)
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Heros[imetier]->attaquer(*Heros[2]);

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
13
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
10 juin 2009

P'tain, je bloquais juste à cause de ça T.T.

Merci beaucoup ^^. Pourrais tu m'expliquer le pourquoi du comment que je progresse ?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
C'est très simple : Heros[2] est de type Personnage* (d'après la définition de Heros).
Or la méthode attaquer attend un Personnage& et non un Personnage*, il faut donc déréférencer Heros[2] avec *

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
13
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
10 juin 2009

Je crois que je vois, merci encore ^_^ !