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 :

for_each + boost::bind = crash ?


Sujet :

C++

  1. #1
    Membre expérimenté
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Points : 1 640
    Points
    1 640
    Par défaut for_each + boost::bind = crash ?
    Bonjour a tous,

    Je souhaite iterer sur une collection (j'utilise donc for_each) et pour chaque element, je souhaite appeler une fonction membre d'une classe quelconque. Par exemple :
    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
    class E {
    public:
    	void print(const std::string& str) {
    		cout << str << endl;
    	}	
    };
     
    void test_stl() {
    	vector<string> strings;
    	fill_n(back_inserter(strings), 10, "abcd");
    	fill_n(back_inserter(strings), 12, "hjk");
    	random_shuffle(strings.begin(), strings.end());
     
    	E e;
    	for_each(strings.begin(), strings.end(), boost::bind(&E::print, e));
    }
    Ici, je compte utiliser la classe E pour afficher les chaines (c'est un exemple basique on est d'accord, car je ne ferai pas comme ça s'il ne s'agissait que de faire cela). Le probleme, c'est que VS2005 (quel merveilleux compilateur celui-la) me crashe a la figure en me disant que le compilateur d'optimisation a plante' (mumph...). Voici le message d'erreur :
    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
    17
    18
    19
    20
    21
    c:\include\boost\bind.hpp(1575) : warning C4180: qualificateur appliqué au type fonction n'a pas de sens ; ignoré
            c:\include\boost\bind.hpp(1609) : voir la référence à l'instanciation de la classe modèle 'boost::_bi::add_cref<Pm,I>' en cours de compilation
            with
            [
                Pm=void (__thiscall E::* )(const std::string &),
                I=1
            ]
            **************\langagetest.cpp(424) : voir la référence à l'instanciation de la classe modèle 'boost::_bi::dm_result<Pm,A1>' en cours de compilation
            with
            [
                Pm=void (__thiscall E::* )(const std::string &),
                A1=E
            ]
    c:\include\boost\mem_fn.hpp(318) : warning C4180: qualificateur appliqué au type fonction n'a pas de sens ; ignoré
            c:\include\boost\bind\bind_template.hpp(225) : voir la référence à l'instanciation de la classe modèle 'boost::_mfi::dm<R,T>' en cours de compilation
            with
            [
                R=void (const std::string &),
                T=E
            ]
    Projet : error PRJ0002 : Résultat d'erreur 1 retourné à partir de 'C:\Program Files\Microsoft Visual Studio 8\VC\bin\cl.exe'.
    Quelqu'un sait-il pourquoi VS crashe lamentablement ? Ma version de boost est la 1.34.1.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    Il manque un _1 à vue de nez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boost::bind(&E::print, e, _1)
    MAT.

  3. #3
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Je dirai pareil !

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Il ne s'agit pas d'un crash mais d'une erreur de compilation.
    Cela n'a rien à voir.

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Citation Envoyé par loufoque Voir le message
    Il ne s'agit pas d'un crash mais d'une erreur de compilation.
    Cela n'a rien à voir.
    En fait si étonnamment, dans ce cas il s'agit bien du compilateur qui plante lamentablement.
    On peut même envoyer un rapport d'erreur à Microsoft, ce que je ne me prive jamais de faire systématiquement

    MAT.

  6. #6
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    avec bind, le compilo devient vite fou quand on se plante !

  7. #7
    Membre expérimenté
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Points : 1 640
    Points
    1 640
    Par défaut
    Merci pour vos réponses.
    J'aurai en effet préféré voir une erreur de compilation explicitement dans le message de VS (car il s'agit bien d'une erreur de ma part !), ce qui signifie quelque chose pour moi, mais c'est le "compilateur d'optimisations" qui crashe (avec rapport et tout...) sans message autre que PRJ00002. Pas très clair...

    J'ai rajouté _1 et forcément ça marche mieux. Il y a des fois, je me demande où j'ai la tête... Et la prochaine fois, je saurais que bind + erreur = crash, au moins je serai pas surpris (le suis-je vraiment ?) !

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Attends, ils ont vraiment appelé ça "compilateur d'optimisations" en Français?!

    Je savais que la traduction française était pourrie, mais à ce point...

    PS: Le nom anglais est "optimizing compiler", donc "compilateur optimisant" ou "compilateur supportant l'optimisation", "compilateur capable d'optimiser", "compilateur optimiseur", etc.

  9. #9
    Membre expérimenté
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Points : 1 640
    Points
    1 640
    Par défaut
    Attends, ils ont vraiment appelé ça "compilateur d'optimisations" en Français?!
    Oui, texto. C'est malheureux...
    PS: Le nom anglais est "optimizing compiler", donc "compilateur optimisant" ou "compilateur supportant l'optimisation", "compilateur capable d'optimiser", "compilateur optimiseur", etc.
    J'avais bien compris. Je hais les traductions auto de MS, qui sont vraiment nulles. Mais bon, j'avais bien compris qu'il ne s'agissait pas d'optimisation car mon expérience m'a montré qu'il valait mieux s'en passer sur ce compilo... Elles sont donc désactivées

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

Discussions similaires

  1. utilisation correct de boost:bind et result_of
    Par guillaume07 dans le forum Boost
    Réponses: 3
    Dernier message: 02/11/2009, 16h13
  2. boost::bind et membre de classe
    Par Trunks dans le forum Boost
    Réponses: 2
    Dernier message: 20/10/2009, 09h58
  3. Télécharger et installer boost::bind
    Par Electroniktor dans le forum Boost
    Réponses: 6
    Dernier message: 16/06/2008, 14h08
  4. Utilité de boost::bind ?
    Par swirtel dans le forum Boost
    Réponses: 5
    Dernier message: 07/09/2007, 17h27
  5. [Boost::bind] Cdecl / Callback
    Par superspag dans le forum Boost
    Réponses: 10
    Dernier message: 18/06/2007, 22h32

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