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 :

Lancer ses propres exceptions


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut Lancer ses propres exceptions
    Bonjour à tous,

    J'aimerai faire ma gestion d'erreur autour des exceptions. Je possède une classe de conversion et voici son code:

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    // Code d'une fonction dans ma classe de conversion
    void CConverter::ToInt(const char* sIn, int& iOut)
    {
    	try
    	{
    		iOut = lexical_cast<int>(sIn);
    	}
    	catch(std::exception)
    	{
    		throw new CConvertException("const char*", "int&", sIn);
    	}
    }
     
    // Code de la fonction appelante
    try
    {
    	CConverter::Instance().ToInt(sString.c_str(), iValue);
    }
    catch(CConvertException ex)
    {
    	LogManager::Instance() << ex.What();
    }
     
    // Classe de CConvertException
    #include "../../Exception/CException.h"
     
    namespace kin
    {
    	namespace utils
    	{
    		namespace conversion
    		{
    			namespace exceptions
    			{
    				class CConvertException : public kin::utils::exception::CException
    				{
    				public:
    					CConvertException(
    						const std::string& sFromType,
    						const std::string& sToType,
    						const std::string& sValue,
    						const std::string& sMessage = "Conversion impossible.");
    				};
    			};
    		};
    	};
    };
     
    // Classe CException
    #include <exception>
    #include <string>
    #include <vector>
    #include <map>
     
    namespace kin
    {
    	namespace utils
    	{
    		namespace exception
    		{
    			class CException : public std::exception
    			{
    			public :
    				CException(const std::string& sMessage, CException* oOriginException = NULL);
    				CException* GetOriginException();
    				const char* what() const throw();
     
    			protected :
    				std::string m_sMessage;
    				void AddCause(const char* sCause);
    				void AddParam(const char* sKey, const char*sValue);
     
    			private:
    				std::vector<const char*> m_oCauseVector;
    				std::map<const char*, const char*> m_oParamMap;
    				CException* m_oOriginException;
    			};
    		};
    	};
    };
    Voilà, lors du "throw", ça me renvoi une exception non géré, alors que l'appelle de celle-ci est entouré d'un try/catch :s

    Donc je ne comprends pas, CException dérive de std::exception, et CConvertException dérive de CException, le catch "attrape" bien les exception de type CConvertException...

    Quelqu'un peut m'éclairer?

    Merci beaucoup

    A bientôt

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Et en attrapant ton std::exception par référence ?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Merci

    J'ai mis catch(std::exception& ex) et c'est pareil (unhandle exception) :'(

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Ha c'est bon, j'suis bête, fallait mettre catch(CConvertException* ex) vu que je lance le throw avec un new derrière...

    Merci beaucoup

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ah oui... Quelle idée d'allouer une exception dynamiquement

    Enfin si tu y tiens, tu peux tout de même attraper un std::exception*

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Bah c'est la première fois que je fais ça...

    En général on fait ça comment?

    merci

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    En général, on récupère un "const MonException& exception"

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Ok merci beaucoup, j'essaye

Discussions similaires

  1. Réponses: 7
    Dernier message: 09/04/2010, 18h48
  2. creer ses propres exceptions
    Par hebus666 dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 09/12/2007, 15h36
  3. Creer ses propres exceptions ?
    Par Seth77 dans le forum C#
    Réponses: 4
    Dernier message: 05/05/2007, 17h36
  4. [JNI] creer ses propres exceptions
    Par Batou dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 23/08/2006, 04h01
  5. Créer ses propres exceptions
    Par Neilos dans le forum C++Builder
    Réponses: 10
    Dernier message: 13/06/2006, 18h44

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