IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Pb de for_each


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut Pb de for_each
    Bonjour,

    je désire utiliser for_each pour appliquer une fonction membre de ma classe A à tous les les objets contenus dans une liste.
    Je suis sous VC6.

    Ainsi je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    void A::Foo(int x)
    {
    	return;
    }
     
    class B
    {
    std::list<A*> m_liste;
    ...
    };
     
    void B::PourTous(int x)
    {
    std::for_each(m_liste.begin(), m_liste.end(), std::bind2nd(std::mem_fun_ref(&A::Foo), x));
    }
    Mais j'obtiens cette erreur :
    error C2784: 'class std::mem_fun_ref_t<_R,_Ty> __cdecl std::mem_fun_ref(_R (__thiscall _Ty::*)(void))' : could not deduce template argument for '<Unknown>' from 'void (__thiscall A::*)(int)'
    Qu'est-ce que je fais d'incorrect ?

    @+

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Et avec mem_fun plutôt que mem_fun_ref (puisque tu stockes des pointeurs) ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    salut,

    pareil !

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Possible que le manque de spécialisation partielle dans VC++ 6 empêche d'utiliser mem_fun avec une fonction dont le type de retour est void. Essaye avec une fonction qui renvoie un int par exemple pour voir ?

    De toute façon, que ce soit ça ou pas, changer de compilo serait une bonne idée. Visual C++ 2005 Express est gratuit, par exemple.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    Citation Envoyé par Laurent Gomila
    Possible que le manque de spécialisation partielle dans VC++ 6 empêche d'utiliser mem_fun avec une fonction dont le type de retour est void. Essaye avec une fonction qui renvoie un int par exemple pour voir ?
    ---> Pareil

    Citation Envoyé par Laurent Gomila
    De toute façon, que ce soit ça ou pas, changer de compilo serait une bonne idée. Visual C++ 2005 Express est gratuit, par exemple.
    ---> OK, je le testerai chez moi car je l'ai chez moi. Là c'est pour ma boîte.

    @+

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    Bonjour,

    effectivement ça marche nickel sous VC2005

    Quel est le pb exactement sous VC6 ?

    @+

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    VC6 est un vieux papy, faut pas s'attendre à des miracles de sa part quand il s'agit de manipuler trop de templates.
    Je pensais que cette erreur venait du manque de spécialisation partielle pour gérer les fonctions ne renvoyant rien, mais apparemment non, on a encore déniché autre chose.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    OK ...
    bon je me suis rabattu sur un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	std::list<A*>::iterator iter;
    	for(iter = m_liste.begin(); iter != m_liste.end(); iter ++) 
    		(*iter)->Foo();
    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Code conditionnel : if else ou for_each ?
    Par quicky2000 dans le forum C++
    Réponses: 8
    Dernier message: 18/02/2007, 16h30
  2. Réponses: 8
    Dernier message: 29/08/2006, 18h36
  3. Réponses: 1
    Dernier message: 11/04/2006, 20h43
  4. [Debutant][STL] For_each instance
    Par Mucho dans le forum SL & STL
    Réponses: 2
    Dernier message: 17/03/2006, 16h29
  5. Problème for_each et foncteur personnel
    Par Alp dans le forum C++
    Réponses: 3
    Dernier message: 16/02/2006, 21h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo