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 ?
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.
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; }
En utilisant les pointeurs, ça pourrait le faire :
mais j'ai une erreur de segmentation si test est différent de 0 ou 1 ?
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; }
Quelqu'un a-t-il des conseils à me donner sur ce sujet ?
Merci d'avance
Partager