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

Langage C++ Discussion :

Probleme avec les references


Sujet :

Langage C++

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Points : 14
    Points
    14
    Par défaut Probleme avec les references
    Bonjour !

    J'ai constate avec etonnement que ce code ne compilait pas

    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
    class A
    {
    	public :
    		A ( int a ) : m_a ( a ) {} ;
    		int a() { return m_a ; } ;
    	private :
    		int m_a ;
    };
     
    class B
    {
    	public :
    		int b ( int &x ) { return x*x ; } ;
    };
     
     
    int main ( int argc, char *argv[] )
    {
    	A a = A ( 5 ) ;
    	B b ;
    	b.b ( a.a() ) ;
    	return 0 ;
    }
    Pour contourner ce probleme, j'ai trouve 3 solutions, la premiere est de changer la classe A par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class A
    {
    	public :
    		A ( int a ) : m_a ( a ) {} ;
    		int& a() { return m_a ; } ;
    	private :
    		int m_a ;
    };
    Sinon on peut modifier la classe B comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class B
    {
    	public :
    		int b ( int x ) { return x*x ; } ;
    };
    ou enfin rajouter une variable dans le main

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int main ( int argc, char *argv[] )
    {
    	A a = A ( 5 ) ;
    	B b ;
            int i = a.a() ;
    	b.b ( i ) ;
    	return 0 ;
    }
    Mais, si cette derniere modif marche, pourquoi la premiere version ne marche pas ?

    EDIT : Fausse manip, le message est parti trop vite

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Une reference non const ne peut pas etre bindee a un temporaire.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    Merci !

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

Discussions similaires

  1. [XL-2010] Comment faire pour ne plus avoir de probleme avec les references Manquantes?
    Par Biker_45 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/09/2012, 20h53
  2. probleme avec les references
    Par Zorgz dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 16/02/2007, 10h58
  3. PROBLEME AVEC LES REQUETES IS NULL / NOT EXISTS
    Par sylvaine dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/06/2004, 13h26
  4. Problem avec les *.AVI sur les panels
    Par NaDiA_SoFt dans le forum C++Builder
    Réponses: 3
    Dernier message: 31/08/2003, 22h50
  5. probleme avec les processus
    Par saidi dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 05/02/2003, 00h18

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