Problème de portée d'une variable déclarée dans un if
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:
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:
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