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