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

SL & STL C++ Discussion :

pb for_each stl


Sujet :

SL & STL C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 301
    Points : 345
    Points
    345
    Par défaut pb for_each stl
    Bonjour à tous

    J'ai un problème lors de l'utilisation de la méthode for_each:
    Voici l'appel de la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    vector<C_Batch> l_vctBatch
    for_each(l_vctBatch.begin(), l_vctBatch.end(), bind2nd(mem_fun(&C_Batch::write), out));
    Sachant que j'ai une classe C_Batch dans laquelle figure la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void write (ostream&);
    avec le corps suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void C_Batch::write(ostream& out)
    {
    out << l_batch.m_uiId << '\t' << l_batch.m_pCouple->m_uiId << endl;
    }
    J'obtiens l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    c:\program files\microsoft visual studio 8\vc\include\functional(312) : warning C4181: qualificateur appliqué au type référence ignoré
            d:\nouveau dossier\heuristique\copie de mps_pg\mps_pg\fichiers sources\data\c_batch.cpp(160) : voir la référence à l'instanciation de la classe modèle 'std::binder2nd<_Fn2>' en cours de compilation
            with
            [
                _Fn2=std::mem_fun1_t<int,C_Batch,std::ostream &>
            ]
    c:\program files\microsoft visual studio 8\vc\include\functional(312) : warning C4181: qualificateur appliqué au type référence ignoré
    c:\program files\microsoft visual studio 8\vc\include\functional(312) : error C2529: '_Right' : la référence à une référence n'est pas conforme
    Je précise que j'utilise Visual C++ 2005
    Je ne comprend pas d'ou viens l'erreur puisqu'il me semble avoir utilisé la même procédure que dans le post http://www.developpez.net/forums/sho...light=for_each

    Voila j'espère que vous pourrez m'aider pour ce problème

  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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    On dirait que la STL de Visual 2005 n'arrive pas à se débrouiller avec un paramètre pris par référence. En gros, ici T vaut ostream&, et comme bind2nd prend un const T&, cela équivaut à un ostream&& (mettre le const au bon endroit ).

    Bizarre que rien en soit prévu pour ça.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 301
    Points : 345
    Points
    345
    Par défaut
    Effectivement... merci beaucoup pour ta réponse rapide, en changeant le prototype de write par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void C_Batch::write(ostream* out)
    {
    	*out << l_batch.m_uiId << '\t' << l_batch.m_pCouple->m_uiId << endl;
    }
    ca marche nickel. Par contre il est vrai qu'il est dommage que rien n'ait été prévu pour le passage des parametres par référence que je trouve très élégant. En tout cas merci encore.

  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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    D'ailleurs pourquoi ta fonction d'affichage n'est pas un operator << ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vector<C_Batch> l_vctBatch
    copy(l_vctBatch.begin(), l_vctBatch.end(), ostream_iterator<C_Batch>(out));

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 301
    Points : 345
    Points
    345
    Par défaut
    en fait ce n'est pas tout à fait cette méthode que j'appelle, j'utilise l'exemple donné dans la faq pour écrire en binaire dans le flux
    http://c.developpez.com/faq/cpp/?pag...ERS_read_write
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void C_Batch::write(ostream* out)
    {
    	bin::write(*out, m_uiId);
    	bin::write(*out, m_pCouple->m_uiId);
    }
    petit détail également l'appel de for_each ce fait comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for_each(l_vctBatch.begin(), l_vctBatch.end(), bind2nd(mem_fun_ref(&C_Batch::write), &out));
    j'ai également des procédures d'écriture au format texte avec les "surcharges" des opérateurs << et >>

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

Discussions similaires

  1. [STL] for_each et transform
    Par yan dans le forum SL & STL
    Réponses: 29
    Dernier message: 03/08/2007, 00h20
  2. [STL] tutoriels sur for_each, transform, foncteur
    Par yan dans le forum SL & STL
    Réponses: 4
    Dernier message: 26/07/2007, 13h41
  3. [STL][algorithm]for_each vs transform
    Par r0d dans le forum SL & STL
    Réponses: 6
    Dernier message: 25/07/2007, 11h52
  4. [Debutant][STL] For_each instance
    Par Mucho dans le forum SL & STL
    Réponses: 2
    Dernier message: 17/03/2006, 16h29
  5. [Kylix] [BCB] pb avec la STL
    Par pykoon dans le forum EDI
    Réponses: 1
    Dernier message: 29/12/2002, 12h56

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