Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1247 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  pointer_to_unary_function, random_shuffle & gcc 3.3

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

pointer_to_unary_function, random_shuffle & gcc 3.3

n°956192
tyrion42
Posté le 19-01-2005 à 11:26:58  profilanswer
 

Salut à tous,
 
j'ai un problème avec pointer_to_unary_function :
Avec VC7, pas de problème mais avec gcc 3.3, j'ai une erreur à la compilation :

Code :
  1. toto.cpp:21: error: invalid initialization of non-const reference of type '
  2.    std::pointer_to_unary_function<int, int>&' from a temporary of type '
  3.    std::pointer_to_unary_function<int, int>'
  4. /usr/include/c++/3.3/bits/stl_algo.h:1666: error: in passing argument 3 of `
  5.    void std::random_shuffle(_RandomAccessIter, _RandomAccessIter,
  6.    _RandomNumberGenerator& ) [with _RandomAccessIter =
  7.    __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >,
  8.    _RandomNumberGenerator = std::pointer_to_unary_function<int, int>]'


j'avoue ne pas comprendre, pourtant ça doit être gros comme une maison mais avec le nez dans le guidon, pas facile  :sleep:  
 

Code :
  1. #include <vector>
  2. #include <functional>
  3. #include <algorithm>
  4. int Rand( int a ) {
  5. return a; // juste pour l'exemple
  6. }
  7. int main() {
  8. std::vector<int> a;
  9. a.push_back( 1 );
  10. a.push_back( 2 );
  11. a.push_back( 3 );
  12. a.push_back( 4 );
  13. a.push_back( 5 );
  14. std::random_shuffle(
  15. a.begin(),
  16. a.end(),
  17. std::pointer_to_unary_function<int, int>(Rand)
  18. );
  19. return 0;
  20. }


mood
Publicité
Posté le 19-01-2005 à 11:26:58  profilanswer
 

n°956209
Lam's
Profil: bas.
Posté le 19-01-2005 à 11:35:23  profilanswer
 

Le 3ème argument de random_shuffle (comme beaucoup d'argument d'algos STL) est non-const. Tu ne peux donc pas lui passer un référence vers un objet temporaire à moins de gruger.
 
Je te conseille donc d'augmenter ta productivité en écrivant plus de lignes de code:

Code :
  1. std::pointer_to_unary_function<int, int>  p(Rand);
  2. std::random_shuffle(
  3. a.begin(),
  4. a.end(),
  5. p
  6. );


n°956237
tyrion42
Posté le 19-01-2005 à 11:53:54  profilanswer
 

Arf... c'était effectivement tout simple...  :cry: je vais aller dormir un peu moi  :pt1cable:  
 
Merci,
Tyrion qui devrait consulter les protos des fonctions de temps en temps

n°959132
Profil sup​primé
Posté le 22-01-2005 à 09:53:38  answer
 

Lam's a écrit :

Le 3ème argument de random_shuffle (comme beaucoup d'argument d'algos STL) est non-const. Tu ne peux donc pas lui passer un référence vers un objet temporaire à moins de gruger.
 
Je te conseille donc d'augmenter ta productivité en écrivant plus de lignes de code:

Code :
  1. std::pointer_to_unary_function<int, int>  p(Rand);
  2. std::random_shuffle(
  3. a.begin(),
  4. a.end(),
  5. p
  6. );



 
Et pourquoi on ne pourrait pas ? Je vois pas ce que ca peut changer qu'il soit const ou pas. Il y a surement un truc qui m'a echappé.

n°961407
Profil sup​primé
Posté le 24-01-2005 à 23:07:38  answer
 

up
svp

n°961446
++fab
victime du syndrome IH
Posté le 24-01-2005 à 23:45:16  profilanswer
 


 
ça revient à ça :
 

Code :
  1. class Foo{};
  2. int main
  3. {
  4.     Foo& x = Foo(); //pas bon, on pourrait modifier un objet qui n'existe plus ...
  5.     const Foo& y = Foo(); //OK
  6. }


 

n°962323
Profil sup​primé
Posté le 25-01-2005 à 20:52:15  answer
 

si il n'existe plus, alors certes on ne peut pas le modifier, mais on ne peut pas le lire non plus, donc je vois pas ce que change le const

n°963302
el muchach​o
Comfortably Numb
Posté le 27-01-2005 à 00:10:45  profilanswer
 

Je me rique à suggérer que le problème vient de l'ordre de la construction de l'objet std::pointer_to_unary_function<int, int>. Lors de l'appel de la fonction std::random_shuffle, il n'est pas dit que la construction a été complétée (sur la pile), du fait que l'ordre est dépendant de l'implémentation.


Message édité par el muchacho le 27-01-2005 à 00:12:56
n°967218
Profil sup​primé
Posté le 31-01-2005 à 19:25:44  answer
 

peut etre mais je pense que c'est pas le probleme ici puisqu'apparemment ca compile avec un const et ca ne compile pas avec un non const. ou alors l'ordre dépend de la constness du truc mais ca m'etonnerait
 
de plus l'exemple de ++fab trois posts plus haut ne fait pas d'appel de fonction, il ne fait qu'initialiser une référence.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  pointer_to_unary_function, random_shuffle & gcc 3.3

 

Sujets relatifs
[Java] java.util.Random pas si random que ça :(random_suffle?
"function" ne fonctionnant qu'une fois...Call to undefined function: mb_strtoupper()??
quoiqu'est-ce unary?[C++] random_shuffle donne toujours les memes combinaisons...
[C++] random_shuffle ne randomize pas[java] un random avec une valeur int
Plus de sujets relatifs à : pointer_to_unary_function, random_shuffle & gcc 3.3


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR