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 :
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 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)); }
Quelqu'un sait-il pourquoi VS crashe lamentablement ? Ma version de boost est la 1.34.1.
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'.
Partager