Probleme de fonction
Fermé
G4bi
Messages postés
4
Date d'inscription
samedi 18 août 2012
Statut
Membre
Dernière intervention
30 mai 2013
-
30 mai 2013 à 20:54
mamiemando Messages postés 32283 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 mars 2023 - 15 juin 2013 à 12:48
mamiemando Messages postés 32283 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 mars 2023 - 15 juin 2013 à 12:48
A voir également:
- Probleme de fonction
- Fonction si et - Guide
- Fonction si avec date ✓ - Forum Excel
- Ajout snap par la fonction - Forum Snapchat
- Fonction find vba - Astuces et Solutions
- Excel remplir une cellule en fonction d'une autre ✓ - Forum Excel
1 réponse
mamiemando
Messages postés
32283
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
17 mars 2023
7 572
15 juin 2013 à 12:48
15 juin 2013 à 12:48
Quel est le message d'erreur ?
Ici attaquer est une méthode de l'objet personnage et prend en paramètre un personnage. On peut effectivement passer une référence vers le personnage attaqué (cible). Si la cible n'est pas modifiée par le fonction attaquer, on peut même passer une const référence (const Personnage & cible).
Si l'instance de personnage qui attaque n'est pas modifiée par la méthode attaquer, tu peux le préciser en rajoutant le mot clé const devant l'accolade ouvrante de la fonction.
En gros voici à quoi ça va ressembler vu de loin :
Personnage.h
class Personnage {
...
public:
Personnage(const char *nom);
void attaquer(Personnage & personnage) const;
};
Personnage.c
void Personnage::attaquer(Personnage & personnage) const {
...
}
main.c
Voici un exemple fait vite fait car je n'ai pas ton code :
... et qui donne :
Bonne chance
Ici attaquer est une méthode de l'objet personnage et prend en paramètre un personnage. On peut effectivement passer une référence vers le personnage attaqué (cible). Si la cible n'est pas modifiée par le fonction attaquer, on peut même passer une const référence (const Personnage & cible).
Si l'instance de personnage qui attaque n'est pas modifiée par la méthode attaquer, tu peux le préciser en rajoutant le mot clé const devant l'accolade ouvrante de la fonction.
En gros voici à quoi ça va ressembler vu de loin :
Personnage.h
class Personnage {
...
public:
Personnage(const char *nom);
void attaquer(Personnage & personnage) const;
};
Personnage.c
void Personnage::attaquer(Personnage & personnage) const {
...
}
main.c
int main() {
Personnage toto("toto");
Personnage tata("tata");
toto.attaquer(tata);
return 0;
}
Voici un exemple fait vite fait car je n'ai pas ton code :
#include <string>
#include <iostream>
#include <ostream>
class personnage_t {
private:
std::string name;
unsigned health;
public:
personnage_t(const char * name0, unsigned health0 = 100):
name(name0),
health(health0)
{}
inline unsigned get_health() const {
return health;
}
inline void set_health(unsigned health0) {
health = health0;
}
inline bool is_dead() const {
return health == 0;
}
inline bool is_alive() const {
return !is_dead();
}
inline const std::string & get_name() const {
return name;
}
void attack(personnage_t & target, unsigned damages = 10) const {
int target_health = target.get_health() - damages;
if (target_health < 0) target_health = 0;
target.set_health((unsigned) target_health);
}
};
std::ostream & operator << (std::ostream & out, const personnage_t & p) {
out << "Personnage: " << p.get_name() << ' ' << p.get_health();
return out;
}
int main() {
size_t round;
personnage_t toto("toto", 100),
tata("tata", 150);
for(round = 1; toto.is_alive() && tata.is_alive(); round++) {
std::cout << "Round " << round << ':' << std::endl
<< toto << std::endl
<< tata << std::endl;
toto.attack(tata, 20);
tata.attack(toto, 15);
}
std::cout << "The end!" << std::endl
<< toto << std::endl
<< tata << std::endl;
return 0;
}
... et qui donne :
Round 1: Personnage: toto 100 Personnage: tata 150 Round 2: Personnage: toto 85 Personnage: tata 130 Round 3: Personnage: toto 70 Personnage: tata 110 Round 4: Personnage: toto 55 Personnage: tata 90 Round 5: Personnage: toto 40 Personnage: tata 70 Round 6: Personnage: toto 25 Personnage: tata 50 Round 7: Personnage: toto 10 Personnage: tata 30 The end! Personnage: toto 0 Personnage: tata 10
Bonne chance