Bonjour,
j'ai une classe A qui a plusieurs constructeurs ; j'utilise un if pour savoir quel constructeur appeler pour construire l'objet a. Le problème est que a n'est plus reconnu en dehors du if.
Comment faire ?

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
24
25
26
27
28
29
30
31
 
#include <iostream>
 
class F1 {};
class F2{};
class A {
public :
int baba;
A(F1 fic){baba=0;}
A(F2 fic){baba=1;}
 
};
 
main()
{
 
int test;
F1 f1;
F2 f2;
 
if (test==0)
     A a(f1);
else if (test==1)
     A a(f2);
else
     std::cerr << "test pas good" << std::endl;
 
// probleme de portee :
std::cout << "baba : " << a.baba << std::endl;
 
}
Le code précédent est simplifié au maximum, et génère une erreur à la compilation à cause de l'utilisation de a au-delà de sa portée.
En utilisant les pointeurs, ça pourrait le faire :

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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
#include <iostream>
 
class F1 {};
class F2{};
 
class a_exception{};
 
class A {
public :
int baba;
A(F1 fic){baba=0;}
A(F2 fic){baba=1;}
 
};
 
main()
{
 
int test=0;
F1 f1;
F2 f2;
A *a;
 
try {
if (test==0)
     a=new A(f1);
else if (test==1)
     a=new A(f2);
else
     throw(a_exception());
}
catch(a_exception& e){
std::cerr << "a non defini" << std::endl;
}
 
// plus de probleme
std::cout << "baba : " << a->baba << std::endl;
 
delete a;
 
}
mais j'ai une erreur de segmentation si test est différent de 0 ou 1 ?
Quelqu'un a-t-il des conseils à me donner sur ce sujet ?
Merci d'avance