Exceptions imbriquées

Exceptions imbriquées - C++ - Programmation

Marsh Posté le 02-03-2006 à 13:20:03    

J'ai un petit souci : j'ai deux try imbriqués et lorsque je lance une exception, elle ne se retrouve pas dans le bloc que je souhaite
 
EDIT : ME SUIS MAL EXPRIME !
 
ex :
 
try
{
   ...
   fonction (tagada1); //ne lance pas d'exception
   ...
 
   try
   {
      fonction (tagada2); //lance une exception
   }
   catch (Exception & )
   {
      cout << "C'est cette exception que je veux :)";
   }
   ...
}
catch (Exception & )
{
   cout << "Mais c'est celle là qui s'affiche :-s";
}
 
Je voudrais que ca soit celle de "l'intérieur" qui soit attrapée. Auriez vous une idée de comment faire ??

Message cité 1 fois
Message édité par vouzico le 02-03-2006 à 13:28:10
Reply

Marsh Posté le 02-03-2006 à 13:20:03   

Reply

Marsh Posté le 02-03-2006 à 13:22:10    

hein ? bin si c'est ton premier appel a fonction qui leve l'exception ca me parait normal

Reply

Marsh Posté le 02-03-2006 à 13:22:52    

ben t'as pas l'impression que c'est normal ? [:pingouino]
l'exception est chopée une premiere fois, donc tu pars dans le catch et ensuite le programme continue son exécution...  
t'as essayé ça ?

Code :
  1. try
  2.   {
  3.      fonction (tagada);
  4.   }
  5.   catch (Exception & )
  6.   {
  7.      cout << "C'est cette exception que je veux :)";
  8.   }


[:petrus75]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 02-03-2006 à 13:25:00    

vouzico a écrit :

J'ai un petit souci : j'ai deux try imbriqués et lorsque je lance une exception, elle ne se retrouve pas dans le bloc que je souhaite
 
ex :
 
try
{
   ...
   fonction (tagada);
   ...
 
   try
   {
      fonction (tagada);
   }
   catch (Exception & )
   {
      cout << "C'est cette exception que je veux :)";
   }
   ...
}
catch (Exception & )
{
   cout << "Mais c'est celle là qui s'affiche :-s";
}
 
Je voudrais que ca soit celle de "l'intérieur" qui soit attrapée. Auriez vous une idée de comment faire ??

ben dans ce cas la, il faut virer ton premier appel a fonction (tagada);
Ce qui se passe me semble clair: ton premier appel declenche l'exception que tu attrapes, et donc le code ne parvient jamais jusqu'a ton 2e appel, qui lui declencherait l'exception imbriquée.
EDIT: grilled :/
 
A+,


Message édité par gilou le 02-03-2006 à 13:25:34
Reply

Marsh Posté le 02-03-2006 à 13:28:42    

edit

Reply

Marsh Posté le 02-03-2006 à 13:31:05    

Ben c'est la meme chose: si l'exception est levée par tagada1, tu atteindras jamais l'appel de tagada2 qui leverait lui l'autre exception. Tu mets que tagada1 ne leve pas d'exception, mais d'apres ce que tu as comme comportement, on dirait bien que si.
 
A+,


Message édité par gilou le 02-03-2006 à 13:32:08
Reply

Marsh Posté le 03-03-2006 à 22:22:29    

Sa fonction doit être définie comme ça:
 

Code :
  1. void fonction(var tagada)
  2. {
  3.    throw new Exception();
  4. }


[:petrus75]
 
Au fait, si la fonction peut potentiellement lever une exception, tu es tenu de toujours capturer l'exception et de produire un traitement d'erreur ou de la laisser se propager mais certainement pas de présumer du comportement de la fonction...


Message édité par slash33 le 03-03-2006 à 22:25:55
Reply

Marsh Posté le 03-03-2006 à 23:25:37    

Code :
  1. void fonction(var tagada)
  2. {
  3.    throw new Exception();
  4.          ^^^
  5. }


 
Je vois pas bien l'intérêt la ...
 

Citation :

Au fait, si la fonction peut potentiellement lever une exception, tu es tenu de toujours capturer l'exception et de produire un traitement d'erreur ou de la laisser se propager mais certainement pas de présumer du comportement de la fonction...


 
Qu'est-ce que tu veux dire ?


Message édité par ++fab le 03-03-2006 à 23:25:56
Reply

Marsh Posté le 04-03-2006 à 00:10:33    

Que je devrais aller me coucher [:petrus75]

Reply

Marsh Posté le 04-03-2006 à 15:57:23    

:)
 
à tête reposé : c'est pas un miracle si tu arrives à empécher la fuite, en faisant succéder new à throw ?

Reply

Marsh Posté le 04-03-2006 à 15:57:23   

Reply

Marsh Posté le 04-03-2006 à 18:43:12    

Si si effectivement. Mais je me demande si je n'ai pas confondu avec le THROW (MFC)
 
Non c'est simple les MFC... [:petrus75]


Message édité par slash33 le 04-03-2006 à 18:43:57
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed