IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

afficher des informations d'un catch(. . .)


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 17
    Par défaut afficher des informations d'un catch(. . .)
    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

  2. #2
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    catch (MyException &e)
    {
        // Traitement
    }
    catch (std::exception &e)
    {
        // Traitement
    }
    catch (...)
    {
        // Traitement
    }

  3. #3
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    j'ai accès à quoi ici pour avoir des informations sur l'erreur
    Tout dépend comment ta classe ou celle des autres ( par exemple la STL et par exemple std::list) a été conçue
    Pour les exceptions de la STL il faut voir la doc
    Faut catcher les exceptions susceptibles de se produire en aval:

    catch (std::exception &e)
    {
    // Traitement
    }
    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ée
    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()

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    ?? L'erreur intercepté tu peux simplement l'afficher avec un cout !
    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.
    (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!)
    Citation Envoyé par Mat.M Voir le message
    eh 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ée
    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.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    PS: Je conseille de la mettre const, la référence d'exception.
    En effet

  6. #6
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    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.
    tu as raison c'est vrai dans le cas d'héritage c'est pour voir si quelqu'un suivait

    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 : 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
    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;
    }

  7. #7
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    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.
    Oui mais si tu as lu le titre de message tu verras que l'auteur demande quoi afficher c'est marqué tout en haut
    Effectivement on ne peut pas toujours avoir la nature du problème mais pour l'utilisateur on peut afficher un message indiquant qu'il y a eu un problème

  8. #8
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Je pense qu'il voulait savoir s'il y avait moyen de faire genre

    Qui explique pourquoi l'erreur s'est produite.

Discussions similaires

  1. Afficher des information sur le PC
    Par koKoTis dans le forum VBScript
    Réponses: 39
    Dernier message: 21/01/2008, 12h59
  2. Afficher des informations dans une ListView
    Par revero275 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/04/2007, 21h58
  3. Afficher des informations de l'ordinateur
    Par christdu13 dans le forum C++
    Réponses: 1
    Dernier message: 31/05/2006, 15h38
  4. Réponses: 2
    Dernier message: 17/05/2006, 15h49
  5. afficher des informations dans un bloc div
    Par francky356 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 23/11/2005, 15h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo