Bonjour,
J'ai un probleme sur un switch case pour une option que je passe dans ma classe.
Voici comment je definis ma classe :
Ensuite ma fonction addBackground est comme ceci :
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 template<typename T> class LumpyBkg : public BkgGen<T> { public: enum LumpOption {uniform, gaussian}; .......... LumpyBkg(int3vector dim, int Nbar, float DC, float magnitude, float radius, LumpOption theLumpOption); ~LumpyBkg(); .......... void addBackground(); private: .......... LumpOption _theLumpOption; };
Ensuite dans ma fonction main je construis mon objet comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 template<typename T> void LumpyBkg<T>::addBackground() { switch (_theLumpOption) { case uniform: cout << "I am adding uniform lumps now\n"; this->makeUniform(); case gaussian: cout << "I am adding gaussian lumps now\n"; this->makeGaussian(); } }
Et j'ai remarque les choses suivantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 LumpyBkg<double> test(dim,Nbar,DC,magnitude,radius,LumpyBkg<double>::gaussian);
-si je laisse mon switch case comme il est, si mon option est "uniform" alors les deux cas vont s'executer : uniform puis gaussian. Si mon option est "gaussian" seul le cas gaussian s'execute (c'est ce que je veux)
- si je change l'ordre de mon switch case (gaussian avant uniform), il va se passer l'inverse : si j'appelle l'option "uniform", seul le cas uniform va s'executer, si j'appelle l'option "gaussian", les deux vont s'executer.
Bizarre
Je ne comprends pas pourquoi ca fait ca, alors si vous avez une idee, je prends !
Merci![]()
Partager