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 :

Problème de gestion des exceptions


Sujet :

C++

  1. #1
    Membre confirmé Avatar de trecks
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 91
    Par défaut Problème de gestion des exceptions
    Bonjour à tous voici un bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void CSLEngine::EndScene()
    {
    	try
    	{
    		m_pVideoMode->Display();
    		throw CException(__LINE__, "Impossible de terminer le rendu de scène");
    	}
    	catch(const CException &e)
    	{
    		CLogger::LogToFile(CLogger::ITError, e.what(), "CSLEngine");
    	}
    }
    Mon problème c'est que dans mon loggeur il me dit toujours "Impossible de terminer le rendu de scène", alors qu'après de multiple test cette méthode semblent fonctionner correctement.

    Y'a-t-il une erreur dans cette méthode?

    Voici le code de la classe loggeur si besoin est

    CLogger.h
    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
    #ifndef __CLogger_h__
    #define __CLogger_h__
     
    #include <iostream>
    #include <fstream>
    #include <string>
     
    namespace SLE
    {
    	class CLogger
    	{
    	public:
    		enum InfoType
    		{
    			ITInfo,
    			ITWarning,
    			ITError
    		};
     
    		static void SetFileName(const std::string strFileName = "LogFile.txt");
     
    		static void LogToFile(InfoType ITType, const std::string &strMessage, const std::string &strEntry);
     
    	private:
    		CLogger();
    		virtual ~CLogger();
     
    		//Flux du fichier log
    		static std::string m_strFileName;
    	};
    }
     
    #endif
    CLogger.cpp
    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
    #include "CLogger.h"
     
    using namespace SLE;
     
    std::string CLogger::m_strFileName;
     
    CLogger::CLogger()
    {}
     
    CLogger::~CLogger()
    {}
     
    void CLogger::SetFileName(const std::string strFileName)
    {
    	m_strFileName = strFileName;
     
    	//Vide le fichier de log existant
    	std::ofstream ofsLogFile(m_strFileName.c_str(),std::ios::trunc);
    	ofsLogFile.close();
    }
     
    void CLogger::LogToFile(CLogger::InfoType ITType, const std::string &strMessage, const std::string &strEntry)
    {
    	std::ofstream ofsLogFile(m_strFileName.c_str(),std::ios::app);
     
    	std::string strInfo;
    	switch (ITType)
    	{
    	case ITInfo:
    		strInfo = "Info";
    		break;
    	case ITWarning:
    		strInfo = "Warning";
    		break;
    	case ITError:
    		strInfo = "Error";
    		break;
    	}
    	ofsLogFile << strInfo << " -- " << strMessage << " -- " << strEntry << std::endl;
    	ofsLogFile.close();
    }

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Citation Envoyé par trecks Voir le message
    Mon problème c'est que dans mon loggeur il me dit toujours "Impossible de terminer le rendu de scène"
    En même temps c'est normal vu que c'est ce que tu lui demandes de faire : throw lève une exception, c'est donc ce qui se produit juste après l'appel à m_pVideoMode->Display()...

    MAT.

  3. #3
    Membre confirmé Avatar de trecks
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 91
    Par défaut
    comment je dois faire pour qu'il ne m'affiche que lorsque m_pVideoMode->Display() ne fonctionne pas, j'ai essayé en testant cette méthode mais elle est de type void

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Je ne sais pas moi, est-ce qu'elle peut vraiment échouer cette méthode ?
    Elle est supposé faire quoi en cas d'erreur (regarde le code et/ou la documentation qui l'accompagne) ?
    Sur quel(s) critère(s) tu te bases pour dire si elle fonctionne ou non ?

    MAT.

  5. #5
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Si tu met throw ici, il va lever l'exception à chaque fois, après un rendu.

    Si c'est toi qui a codé Display(), il faut que tu mettes un throw dans cette méthode, dès que tu détectes une erreur.

    Si tu ne l'a pas codé et quelle ne renvoie pas de code d'erreur, elle lève peut-être déjà elle-même une exception, ou il existe peut-être une méthode getLastError(), sinon tu ne peut rien faire de plus.

    Mais de toutes façons, ton try catch me semble mal placé dans EndScene(). Généralement j'en met un dans le main et c'est tout. Là, tu risques de continuer à rendre ta scène comme si rien ne s'était passé. Il faudrait au moins que tu relance l'exception dans le catch si tu veux le laisser dans EndScene().

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

Discussions similaires

  1. Problème avec la gestion des exceptions
    Par valkeke dans le forum Langage
    Réponses: 10
    Dernier message: 13/04/2011, 15h26
  2. Problème de gestion des exceptions
    Par tnarol dans le forum Général Java
    Réponses: 3
    Dernier message: 24/02/2011, 16h07
  3. Réponses: 2
    Dernier message: 07/06/2007, 17h02
  4. Problème de gestion des exceptions
    Par Artasali dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/02/2007, 03h20
  5. Problème - Gestion des exceptions - MFC.
    Par Atomikx dans le forum MFC
    Réponses: 4
    Dernier message: 14/11/2005, 09h38

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