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 :

Exception non interceptée


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut Exception non interceptée
    Bonjour,

    J'ai ceci et l'exception générée "TEST" n'est pas interceptée et je ne comprends pas pourquoi. Vos lumières seraient le bienvenues.

    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
     
       class Exception : public std::exception
       {
          public :
          std::string Message;
          explicit Exception(std::string const& Mes) throw() : Message(Mes) { }
          explicit Exception(const char *Mes) throw()          : Message(Mes) { }
          virtual const char* what() const throw()       {   return(exception::what());   }
          virtual ~Exception() throw() { }
       };
     
       int main() {
         try {
           throw std::logic_error("TEST");   // n'est pas interceptée dans le catch
           throw Exception("TEST2");  // est bien interceptée dans le catch
        } catch (Exception &e) {
          printf("%s\n",e.massage.c_str();
          retrun(1);
        }
        retrun(0);
      }

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    std::logic_error est une std::exception, elle peut être interceptée par catch ( std::logic_error& ) ou catch ( std::exception& ) ou aussi catch ( std::logic_error ) ou catch ( ... ).
    Mais std::logic_error n'est pas une Exception.

  3. #3
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Bonjour,

    merci de ta réponse rapide, mais je ne comprends pas ma class Exception hérite de std::exception !
    Alors peut-être que mes compétences en C++ sont trop limitées, mais alors comment puis-je créer une clase d'exception interceptant mes propres Exception et std::exception, enfin TEST et TEST2 ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Tu dis toi-même que ton Exception hérite de std::exception, et n'est donc pas une std::logic_error.
    Donc forcément si tu throw une std::logic_error, ben tu peux pas l'attrapper dans une Exception. Ni l'inverse.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    pourtant le code suivant intercepte bien l'exception en question:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try {
       throw std::logic_error("TEST");   // n'est pas interceptée dans le catch
    } catch (std::exception &e) {
        printf("%s\n",e.what());
     }

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Oui parce que std::logic_error hérite de std::exception et en tant que tel la relation entre elles est "est un". Une std::logic_error est une std::exception.
    Ton Exception n'est pas une std::logic_error.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 760
    Par défaut
    std::logic_error hérite de std::exception (comme toutes les exceptions du standard).

    Par conséquent, std::logic_error et Exception sont des std::exception, mais Exception n'est pas une std::logic_error et std::logic_error n'est pas Exception.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exception non interceptée
    Par valda117 dans le forum PL/SQL
    Réponses: 0
    Dernier message: 28/08/2014, 22h43
  2. Interception d'exceptions non traitées
    Par vanitom dans le forum C++
    Réponses: 4
    Dernier message: 20/04/2009, 14h24
  3. Exception non intercepté
    Par uriotcea dans le forum C++
    Réponses: 5
    Dernier message: 26/05/2008, 13h06
  4. Réponses: 4
    Dernier message: 14/02/2005, 19h41

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