Borland => problème avec exceptions

Borland => problème avec exceptions - C++ - Programmation

Marsh Posté le 29-06-2003 à 01:26:16    

Qui peut me dire pourquoi ça ne marche pas? C'est tiré du cours de Christian Casteyde:
 

Code :
  1. #include <iostream>
  2. using namespace std;
  3. class erreur // Première exception possible, associée
  4. // à l?objet erreur.
  5. {
  6. public:
  7. int cause; // Entier spécifiant la cause de l?exception.
  8. // Le constructeur. Il appelle le constructeur de cause.
  9. erreur(int c) : cause(c) {}
  10. // Le constructeur de copie. Il est utilisé par le mécanisme
  11. // des exceptions :
  12. erreur(const erreur &source) : cause(source.cause) {}
  13. };
  14. class other {}; // Objet correspondant à toutes
  15. // les autres exceptions.
  16. int main(void)
  17. {
  18. int i; // Type de l?exception à générer.
  19. cout << "Tapez 0 pour générer une exception Erreur, "
  20. "1 pour une Entière :";
  21. cin >> i; // On va générer une des trois exceptions
  22. // possibles.
  23. cout << endl;
  24. try // Bloc où les exceptions sont prises en charge.
  25. {
  26. switch (i) // Selon le type d?exception désirée,
  27. {
  28. case 0:
  29. {
  30. erreur a(0);
  31. throw (a); // on lance l?objet correspondant
  32. // (ici, de classe erreur).
  33. // Cela interrompt le code. break est
  34. // donc inutile ici.
  35. }
  36. case 1:
  37. {
  38. int a=1;
  39. throw (a); // Exception de type entier.
  40. }
  41. default: // Si l?utilisateur n?a pas tapé 0 ou 1,
  42. {
  43. other c; // on crée l?objet c (type d?exception
  44. throw (c); // other) et on le lance.
  45. }
  46. }
  47. } // fin du bloc try. Les blocs catch suivent :
  48. catch (erreur &tmp) // Traitement de l?exception erreur ...
  49. { // (avec récupération de la cause).
  50. cout << "Erreur erreur ! (cause " << tmp.cause << " )" << endl;
  51. }
  52. catch (int tmp) // Traitement de l?exception int...
  53. {
  54. cout << "Erreur int ! (cause " << tmp << " )" << endl;
  55. }
  56. catch (...) // Traitement de toutes les autres
  57. { // exceptions (...).
  58. // On ne peut pas récupérer l?objet ici.
  59. cout << "Exception inattendue !" << endl;
  60. }
  61. return 0;


 
Je n'ai pas d'erreur à la compilation mais à l'exécution:
 

Citation :

Le projet Project1.exe a provoqué une classe d'exception int avec le message 'Adresse de l'objet exception : 0xA95D3A'.  Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer.


 
Des idées?


---------------
Another .Net Blog
Reply

Marsh Posté le 29-06-2003 à 01:26:16   

Reply

Marsh Posté le 29-06-2003 à 10:17:39    

"Adresse de l'objet exception" ha ils l'ont bien traduit tiens [:ddr555]
 
Ça serait pas mal que tu dises sur quelle ligne ça plante :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 29-06-2003 à 11:30:18    

Code :
  1. #include <stdexcept>
  2. #include <iostream>
  3. using namespace std;
  4. int main()
  5. {
  6.   try
  7.     {
  8.       throw logic_error("hello" );
  9.     }
  10.   catch(const exception &e)
  11.     {
  12.       cerr << e.what() << endl;
  13.     }
  14.   catch(...)
  15.     {
  16.       cerr << "exception inattendu" << endl;
  17.     }
  18. }

je lui ai fait testé ça, ça plante aussi...

Reply

Marsh Posté le 29-06-2003 à 20:57:01    

ça plante sur le throw


---------------
Another .Net Blog
Reply

Marsh Posté le 30-06-2003 à 08:51:32    

C quoi que tu utilise C++ Builder? Si c le cas c tt à fait normal, par défaut ils choppe toute exception et te la signale, après tu peux continuer l'exécution normale de ton prog si l'exception est ratrapée par celui ci.


---------------
Le Tyran
Reply

Marsh Posté le 30-06-2003 à 10:07:46    

Tools -> Debuger, là y a une option pour ne pas s'arrêter sur les exceptions :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 30-06-2003 à 15:50:18    

ouais, j'ai vu ça...
 
Mais il y a deux options:
 
S'arrêter sur les exceptions Delphi
 
S'arrêter sur les exceptions C++
 
Je décoche les deux options ou seulement Delphi?


---------------
Another .Net Blog
Reply

Marsh Posté le 30-06-2003 à 15:53:21    

vu que tu fais des throw et non des raise, ce sont des exceptions C++ que tu fais :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 30-06-2003 à 15:53:58    

haazheel a écrit :

ouais, j'ai vu ça...
 
Mais il y a deux options:
 
S'arrêter sur les exceptions Delphi
 
S'arrêter sur les exceptions C++
 
Je décoche les deux options ou seulement Delphi?


 
Je dirais les deux, en même temps il te sufit d'appuyer sur F9 ou F8 pour que l'exécution de ton prog continue  [:spamafote]


---------------
Le Tyran
Reply

Marsh Posté le 30-06-2003 à 15:54:59    

de toute manière j'ai décoché les deux options...
 
Comme ça je suis tranquille...


---------------
Another .Net Blog
Reply

Marsh Posté le 30-06-2003 à 15:54:59   

Reply

Marsh Posté le 30-06-2003 à 16:04:53    

LetoII a écrit :


 
Je dirais les deux, en même temps il te sufit d'appuyer sur F9 ou F8 pour que l'exécution de ton prog continue  [:spamafote]  

:heink: on doit pas avoir la meme utilisation des exceptions alors...

Reply

Marsh Posté le 30-06-2003 à 16:10:18    

++Taz a écrit :

:heink: on doit pas avoir la meme utilisation des exceptions alors...


 
Je pense que si, mais en fait lorsque tu as une exceptino qui est lancée c++ builder arréte l'exécution du programme même si cette exception va être ratrapée par un bloc catch dasn el cadre du traitemetn d'erreur du dit programme. Il faut alors lui dire de continuer l'exécution du programme pour que celui ci puisse rattrapper l'exception et la traiter.
 
Par exemple:
 

Code :
  1. try
  2. {
  3.   throw MonException();
  4. }
  5. catch(MonException &e)
  6. {
  7.    cout << "C normal"<<endl;
  8. }


 
Va systématiquement vrovoquer la mise en pause de l'exécution alors qu'à priori le programme peut continuer à s'exécuter normalement.


Message édité par LetoII le 30-06-2003 à 16:12:10

---------------
Le Tyran
Reply

Marsh Posté le 30-06-2003 à 16:11:33    

LetoII a écrit :


 
Je pense que si, mais en fait lorsque tu as une exceptino qui est lancée c++ builder arréte l'exécution du programme même si cette exception va être ratrapée par un bloc catch dasn el cadre du traitemetn d'erreur du dit programme. Il faut alors lui dire de continuer l'exécution du programme pour que celui ci puisse rattrapper l'exceptino et la traiter.


 
ben c'est relou en diable, ca, quand meme :O

Reply

Marsh Posté le 30-06-2003 à 16:12:45    

chrisbk a écrit :


 
ben c'est relou en diable, ca, quand meme :O


 
Bof, ça se paramétres aussi. [:spamafote]


---------------
Le Tyran
Reply

Sujets relatifs:

Leave a Replay

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