bonjour je dev un jeu ou TOUS les perso (héro principal,monstres) hérite de la classe main qui contient frapper:
mais je suis concé :(
Code:
1
2
3
4
5 void frapper(std::string cible){ std::getline(std::cin,cible) (cible).dammage(20) }
Version imprimable
bonjour je dev un jeu ou TOUS les perso (héro principal,monstres) hérite de la classe main qui contient frapper:
mais je suis concé :(
Code:
1
2
3
4
5 void frapper(std::string cible){ std::getline(std::cin,cible) (cible).dammage(20) }
et la
?
La mienne aussi s'est désintégrée.
Pourrait-on avoir une clarification de ton problème?
La mienne a perçu quelque chose :D
Si tu veux passer un objet de la classe Personnage en paramètre de ta fonction, tu dois indiquer dans la signature de ta fonction le bon type (le nom de la classe). Hors, tu indiques que l'objet attendu en paramètre est un objet de type "string", donc une chaine de caractère du genre "Roger". Mais la classe "string" ne possède pas de fonction "dammage".
Si tu veux pouvoir indiquer quelle cible est attaquée à partir d'une chaine de caractère fournie dans l'entrée standard par l'utilisateur de ton programme, alors côté code, tu dois fabriquer - ou récupérer s'il existe déjà - l'objet de la classe "Personnage" qui a pour nom celui passé par l'utilisateur :
Bon il y'aurait un million de choses à revoir pour faire ce que tu veux faire proprement, mais on va se contenter déjà de t'aider à appréhender les notions de base.Code:
1
2
3
4
5
6
7 void frapper(std::string nom_cible){ std::getline(std::cin,nom_cible); Personnage* cible = maSuperFonctionQuiRecupereUnObjetPersonnageQuiAPourNom(nom_cible); cible->dammage(20); }
Bon courage !
voila le code tous les perso hérite de ca
Code:
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 class Pmain{ public: //========INTERACTIF================== // ajouter: std::string name; void rest(){ std::string myname; int life; int mana; int defence; int attaque; int level; int candy; int MAXlife; int MAXmana; int arme_number; } void defname(std::string dname){myname = dname;} std::string name = myname; void AFFname(){std::cout << myname;} void Dname(){std::getline (std::cin, myname);name = myname;} void dire(std::string const dire) {name = myname;std::cout <<myname<<": "<< dire <<std::endl;} void dire_using(std::string const dire_using){name = myname;std::cout <<myname<<" using "<< dire_using <<std::endl;} void dammage(int NUMdammage,std::string envoiyeur){ name = myname; NUMdammage - defence; life - NUMdammage; std::cout <<NUMdammage<< " damage on "<< myname <<" by "<<envoiyeur<<"\n\n";} //=========ATTAQUE========= void frapper(Pmain cible){ cible.rest(); cible.dammage(20,cible.myname); }
Quand tu écris cela :La fonction reçoit une copie de cible qui EST du type Pmain. Et donc ça n'est PAS un type dérivant de Pmain!Code:
1
2
3
4
5 void frapper(Pmain cible){ // cible EST un Pmain donc certainement pas d'un autre type cible.rest(); cible.dammage(20,cible.myname); }
L'accès à un classe "du type Pmain" ne peut pas ce faire par un objet Pmain. Il doit se faire par un pointeur ou une référence.
Exemple :Code:
1
2
3
4
5 void frapper(Pmain &cible) { // note le '&' que j'ai ajouté // cible est donc maintenant une référence à un Pmain cible.rest(); // là on a bien une référence donc un objet qui peut dériver de Pmain cible.dammage(20,cible.myname); // là aussi }
correction ?puisCode:
1
2
3
4
5
6 void frapper(Pmain cible){ cible.dammage(20 + cible.attaque,cible.myname); cible.dire("--censuré-- \nlife -__\n\n"); }
jean est un aventurier c juste Pmain avec 2 attaques(fonctions en plus)Code:
1
2
3 jean.frapper(water_monster); water_monster = cible;
Honnetement vue la qualité du code tu as bien d'autres problèmes avant celui qui t'amènes ici.
La (re)lecture d'un cours et de docs devraient être ta priorité.
Les concepts d'héritage, typage statique/dynamique, pointeur, référence, copie, et bien d'autres sont clairement manquants...
jais TOUT modifié la structure et ca marche mais jait un autre problème mais c sur un autre sujet ^^