Bonjour,

J'ai une erreur etrange de compilation que j'aimerais bien que l'on m'explique.
Voici un extrait de code qui compile :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
shared_ptr<Base> base;
shared_ptr<Derivee> derivee;
...
switch(...)
{
case 0:
derivee = dynamic_cast_pointer<Derivee>(base);
derivee->f();
break;
 
default:
break;
}
Mais si je deplace la declaration de derivee dans le case 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
 
shared_ptr<Base> base;
...
switch(...)
{
case 0:
shared_ptr<Derivee> derivee = dynamic_cast_pointer<Derivee>(base);
derivee->f();
break;
 
default:
break;
}
Ben la ca passe plus (alors que si j'utilise des pointeurs standards avec un dynamic_cast, ca passe toujours.

Voici le message d'erreur sous gcc :

cimd2.cpp:106: error: jump to case label
cimd2.cpp:100: error: crosses initialization of `boost::shared_ptr<Derivee> derivee'
cimd2.cpp:106: warning: destructor needed for `derivee'
cimd2.cpp:106: warning: where case label appears here
cimd2.cpp:106: warning: (enclose actions of previous case statements requiring destructors in their own scope.)

Ce qui le gene c'est que la variable derivee soit declaree dans le scope du case, mais je ne vois pas le probleme, d'autant plus que l'objet Derivee possede egalement un destructeur.

Votre aide sera la bienvenue.