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 :

references et objets fonctions


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut references et objets fonctions
    Bonjour à tous.

    Le code suivant ne compile ni sous g++ 3.4.2, ni sous comeau 4.3.3 :

    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
    22
    23
     
    #include <iostream>
    #include <vector>
    #include <iterator>
     
    void str_acc(std::string& str_result, std::string s)
    {
       str_result += s;
    }
     
    int main()
    {
       std::vector<std::string> v;
       std::string str_result;
     
       v.push_back("test1");
       v.push_back("test2");
     
       std::for_each(v.begin(), v.end(), 
          std::bind1st(ptr_fun(&str_acc), str_result));
     
       std::cout << str_result;
    }
    mais il marche en changeant la référence en pointeur dans les arguments
    de str_acc.

    Il semble y avoir un problème de référence sur référence.
    Est-il interdit d'avoir des arguments de type référence dans les objets
    fonctions ?
    Ou des objets fonctions de tel type pour bind1st et bind2nd ?

    Merci.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    La batterie de fonction STL *ptr_fun*, *mem_fun* etc...
    Ne marche pas avec des fonctions dont les paramètres sont passés par référence.
    Il existe une série de 'binder' qui couvre tout les cas dans boost (www.boost.org)

  3. #3
    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
    En général lorsque l'on souhaite modifier quelque chose, on ne passe pas par for_each. Dans ton cas il faudrait utiliser std::accumulate. Pour une modification des éléments eux-mêmes ce serait std::transform.

  4. #4
    Futur Membre du Club
    Inscrit en
    Février 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par VoidSeer
    La batterie de fonction STL *ptr_fun*, *mem_fun* etc...
    Ne marche pas avec des fonctions dont les paramètres sont passés par référence.
    OK, merci.

    Aurais-tu des références sur ce sujet ? J'ai du mal à en trouver.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    Je pense qu'il doit y avoir quelques explications dans boost, sur le pourquoi ils ont étendus les fonctions de la STL.
    Sinon, le message d'erreur un peu obscur du compilateur fournit un début de réponse. G++ renvoie un truc du style "error: forming reference to reference type `const std::string&'". C'est un peu barbare de prime abord, mais si tu regarde un peu le code de 'bind1st' par exemple, l'erreur est facilement explicable.

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/09/2007, 14h26
  2. Affectation d'une reference à un objet
    Par menzlitsh dans le forum Langage
    Réponses: 10
    Dernier message: 22/08/2007, 11h51
  3. [Castor] Conserver les references des objets
    Par troisj dans le forum Persistance des données
    Réponses: 1
    Dernier message: 01/08/2007, 22h04
  4. ActionListener reference d'objet
    Par samtheh dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 05/04/2007, 17h24
  5. [Firebird]Erreur:la reference d'objet n'est pas definie
    Par monmien dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/02/2006, 09h20

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