Bonjour,
que peut-on récupérer d'un catch général :
} catch (...) {
// j'ai accès à quoi ici pour avoir des informations sur l'erreur
}
merci
Version imprimable
Bonjour,
que peut-on récupérer d'un catch général :
} catch (...) {
// j'ai accès à quoi ici pour avoir des informations sur l'erreur
}
merci
A rien du tout ! Faut l'utiliser en dernier recours, si le type d'erreur produit n'a pas été catché...
Faut catcher les exceptions susceptibles de se produire en aval:
Code:
1
2
3
4
5
6
7
8
9
10
11
12 catch (MyException &e) { // Traitement } catch (std::exception &e) { // Traitement } catch (...) { // Traitement }
Tout dépend comment ta classe ou celle des autres ( par exemple la STL et par exemple std::list) a été conçueCitation:
j'ai accès à quoi ici pour avoir des informations sur l'erreur
Pour les exceptions de la STL il faut voir la doc
oui mais tout dépend du namespace ; si ta classe ne fait pas partie de std ( la STL ) l'exception ne sera pas géréeCitation:
Faut catcher les exceptions susceptibles de se produire en aval:
catch (std::exception &e)
{
// Traitement
}
C'est à la déclaration de la classe et son corps qu'il faut déclarer le déclenchement d'exceptions adéquates
Pour savoir quoi afficher dans une exception il faut appeler la méthode adéquate avec throw()
Un cout de quoi? Avec un catch(...), tu n'as rien à afficher, à part "une exception a remonté jusqu'à cette partie du code". Tu n'as aucune information sur la nature de l'exception elle-même.Citation:
?? L'erreur intercepté tu peux simplement l'afficher avec un cout !
(Et avec les bons réglages sous Visual Studio, tu n'es même pas sûr qu'il s'agisse d'une exception C++, car ça peut aussi bien être une exception SEH!)
Ben non, ça n'est pas une question de namespace: Ça dépend seulement si la classe d'exception lancée hérite de std::exception ou non.
PS: Je conseille de la mettre const, la référence d'exception.
Je pense qu'il voulait savoir s'il y avait moyen de faire genre
Qui explique pourquoi l'erreur s'est produite.Code:cout << e.what();
tu as raison c'est vrai dans le cas d'héritage :mouarf: c'est pour voir si quelqu'un suivait :aie:
Louvinon il faut que tu gères tes messages avec Throw c'est le BA à BA du C++
voilà un exemple tiré du MSDN
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
43
44
45
46
47
48
49
50
51 // exceptions_trycatchandthrowstatements2.cpp // compile with: /EHsc #include <iostream> using namespace std; void MyFunc( void ); class CTest { public: CTest(){}; ~CTest(){}; const char *ShowReason() const { return "Exception in CTest class."; } }; class CDtorDemo { public: CDtorDemo(); ~CDtorDemo(); }; CDtorDemo::CDtorDemo() { cout << "Constructing CDtorDemo.\n"; } CDtorDemo::~CDtorDemo() { cout << "Destructing CDtorDemo.\n"; } void MyFunc() { CDtorDemo D; cout<< "In MyFunc(). Throwing CTest exception.\n"; throw CTest(); } int main() { cout << "In main.\n"; try { cout << "In try block, calling MyFunc().\n"; MyFunc(); } catch( CTest E ) { cout << "In catch handler.\n"; cout << "Caught CTest exception type: "; cout << E.ShowReason() << "\n"; } catch( char *str ) { cout << "Caught some other exception: " << str << "\n"; } cout << "Back in main. Execution resumes here.\n"; return 0; }