Tom's Guide > Forum > Programmation > [C++] Petit probléme de foncteurs !! Enfin je crois...

[C++] Petit probléme de foncteurs !! Enfin je crois...

Forum Programmation : [C++] Petit probléme de foncteurs !! Enfin je crois...

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonsoir !
J'ai un petit soucis de programmation que j'aimerais soumettre à la communauté, j'ai le cerveau en feu !

Voici les classes impliquées :

Code :
  1. class Groupe {
  2. private:
  3.     string nom;
  4.     list<Creature *> groupe;
  5. public:
  6.     Groupe(string nom):nom(nom){cout << "Creation du groupe" << nom << endl;};
  7.     ~Groupe(){};
  8.     //Dégats
  9.     void dalle();
  10.     void trappe(int);
  11.     //Affichage
  12.     void affGroupe();
  13.     //Manipulation
  14.     void changeTete(Creature *); //Changer le premier
  15.     void ajoutAventurier(Creature * crea); //Ajout d'un aventurier au groupe
  16.     void echange(Creature* a,Creature* b); //Echanger les places de deux membres
  17.     void potion(int); //Donner une potion rendant x pv au plus faible
  18.     //Getter
  19.     list<Creature *> & getList(){ return groupe; };
  20.     Creature* getTete();
  21.     int getMinPv(); //Renvoi le nb de pdv le plus petit du groupe
  22. };
  23. class Creature {
  24. private:
  25. protected:
  26.     string nom;
  27.     int pv;
  28.     int poids;
  29.     bool mort;
  30. public:
  31.     Creature(string nom,int pv, int poids = 0):nom(nom),pv(pv), poids(poids), mort(false){cout << endl << "Je suis " << nom << ", j'ai " << pv << " points de vie.";};
  32.     virtual ~Creature();
  33.     virtual void encaisser(int degats)=0;
  34.     void soigner(int valSoin);
  35.     void setMort() { mort = true;};
  36.     int getPv() { return pv; } ;
  37.     int getPoids() { return poids; }
  38.     string getNom(){return nom;};
  39. };




Voici les methodes impliquées :

Code :
  1. void Groupe::potion(int pvRendu)
  2. {
  3.     int min;
  4.     min=this->getMinPv();
  5.     for_each(groupe.begin(),groupe.end(),bind1st(DonPotion(pvRendu),min));
  6. }
  7. int Groupe::getMinPv()
  8. {    MinPv min;
  9.     min = for_each(groupe.begin(),groupe.end(),MinPv());
  10.     return min.pvMin;
  11. }



et Voici le message d'erreur du compilateur :

Code :
  1. /usr/include/c++/4.1.3/bits/stl_function.h: In member function «typename _Operation::result_type std::binder1st<_Operation>::operator()(typename _Operation::second_argument_type& ) const [with _Operation = DonPotion]":
  2. /usr/include/c++/4.1.3/bits/stl_algo.h:159:  instantiated from «_Function std::for_each(_InputIterator, _InputIterator, _Function) [with _InputIterator = std::_List_iterator<Creature*>, _Function = std::binder1st<DonPotion>]"
  3. groupe.cpp:63:  instantiated from here
  4. /usr/include/c++/4.1.3/bits/stl_function.h:412: erreur: passing «const DonPotion" as «this" argument of «void DonPotion::operator()(int, Creature*)" discards qualifiers



Je pense pas que la STL soit buggée xD.... donc j'ai du oublier quelque chose, merci à ceux qui proposeront des idées !


Message édité par elminipouss le 30-10-2007 à 16:33:52
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

salut,
foncteurs ?!? c'est un animal, une voiture, ... ?

DonPotion, c'est quoi?

si c'est pas trop long, tu peux mettre tes fichiers dans un endroit du web accessible?

sinon avec le peu d'info, je dirais que tu essais d'attribuer une valeur à une variable déclarée comme constante à l'aide d'un opérateur surchargé.

------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

Le foncteur c'est en quelque sorte l'opérateur de cast.

 
Code :
  1. min = for_each(groupe.begin(),groupe.end(),MinPv());


pourquoi mets-tu les parenthèses après MinPv.
Ce que tu as écrit est équivalent à:
MinPv : : operator() ()
Il me semlbe que tu devrais mettre:
MinPv : : operator()

 

J'imagine que si tu mets directement MinPv, il ne veux pas car c'est une classe ? :)

 

Ensuite, le for_each retourne "void", alors je vois pas trop ce que tu essaie de faire là :)

Message cité 1 fois
Message édité par CRicky le 30-10-2007 à 23:40:16
------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

CRicky a écrit :

Le foncteur c'est en quelque sorte l'opérateur de cast.


je dormirai - con, je connaissais pas le terme :jap:


Message édité par coca25 le 30-10-2007 à 23:43:46
------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25
Tom's Guide > Forum > Programmation > [C++] Petit probléme de foncteurs !! Enfin je crois...
Aller à :

Il y a 619 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens