Page 1 sur 1

Erreur pour une fonction

MessagePosté: 12 Mar 2010, 22:48
de Miceli
Bonsoir

Je rencontre des erreurs pour un projet et malgré mes recherches sur internet je n'ai trouvé aucune solution, voilà le code de la fonction où je rencontre mes erreurs :

Code: Tout sélectionner
void Armure::equiperArmure()
{
    cout<<"Ce personnage vient de s'equiper de cette armure"<<endl;
    Personnage::vie=(this->pvProtection)+(Personnage::vie);
    cout<<"Vie: "<<Personnage->vie<<endl;
}


Cette fonction a pour but de prendre la vie d'un personnage et d'y ajouter les points de protections (pvProtection).
Cela me retourne les erreurs suivantes :

Erreur 1 error C2597: référence non conforme à un membre non static 'Personnage::vie'

Erreur 2 error C3867: &'Personnage::vie' : liste d'arguments manquante dans l'appel de fonction ; utilisez 'Personnage::vie' pour créer un pointeur vers membre

D'autres informations qui pourront peut être vous être utiles :

armure est une class fille de la class Objet.
Personnage est une class fille de la class Element.

Dans le Armure.h j'ai mit #include"Personnage.h"

Merci de votre aide.

Re: Erreur pour une fonction

MessagePosté: 13 Mar 2010, 15:12
de Tibo
C'est normal : il faut que tu dises quel est le personnage qui vient de faire l'acquisition de cette belle armure...
Quand tu écris Personnage::vie, c'est comme si tu disais à l'ordinateur "prend la vie de tous les personnages", alors que toi tu voulais dire "prend la vie de tel personnage"...
Donc il faudrait mettre plutôt :
Code: Tout sélectionner
Personnage p;
cout<<"Ce personnage vient de s'equiper de cette armure"<<endl;
p.vie=(this->pvProtection)+(p.vie);

Mais c'est pas encore parfait, car écrire ça, ça veut dire qu'on créé un nouveau personnage (p). Donc il faut passer à ta fonction l'adresse d'un personnage existant.
Finalement, il faut faire un truc genre :
Code: Tout sélectionner
void Armure::equiperArmure(Personnage *p)
{
    cout<<"Ce personnage vient de s'equiper de cette armure"<<endl;
    p->vie=(this->pvProtection)+(p->vie);
    cout<<"Vie: "<<p->vie<<endl;
}

Re: Erreur pour une fonction

MessagePosté: 14 Mar 2010, 20:44
de Miceli
Merci de votre réponse , je reviens car j'ai une nouvelle erreur que j'obtiens pour la première fois :

Erreur 1 error C2471: impossible de mettre à jour la base de données 'c:\users\antonio\documents\visual studio 2008\projects\projet\projet\debug\vc90.pdb' du programme c:\users\antonio\documents\visual studio 2008\projects\projet\projet\arme.cpp 1 projet


L'erreur se situe dans tous mes fichiers aux niveaux des include.

Merci de votre aide

Re: Erreur pour une fonction

MessagePosté: 15 Mar 2010, 13:30
de Tibo
Salut cette erreur, c'est visual studio que se l'a créé tout seul comme un grand.
Donc pour la résoudre, je pense que quitter et réouvrir visual studio résoudra ton problème. Autrement, il suffit de faire build/rebuild solution.

J'espère que ça remarche !

Re: Erreur pour une fonction

MessagePosté: 16 Mar 2010, 21:15
de Miceli
Oui ca a remarché , j'ai une nouvelle question c'est pas une erreur pour une fois.
Est il possible de créer une classe uniquement pour y mettre des fonctions, une classe qui ne servirait pas à créer d'instances ?

Par exemple une classe Affichage qui nous permettrait de faire des dessins en ascii sans encombrer le Main.

Merci de votre aide

Re: Erreur pour une fonction

MessagePosté: 17 Mar 2010, 19:00
de Tibo
Salut,
c'est tout à fait possible, dans ce cas tu créé tes fonctions en static pour pouvoir les utiliser comme ça :
Code: Tout sélectionner
Affichage::dessinePerso()


Du coup, plus besoin de créer un objet de type Affichage....