Forum Programmation.c++ Créer une exception

Posté par .
Tags : aucun
0
11
jan.
2005
Bonjour

Je suis en train de développer une lib. Et j'aimerais créer un type XMLException (vous devinerez son utilité :)
Je veux qu'il hérite de std::exception.
Voici sa définition :
class XMLException : public std::exception {
public:
XMLException(std::string message);
XMLException(const char *message);
XMLException(char *message);
~XMLException() {};
const char* what () const throw();
private:
const char *msg;
};

La ligne en italique semble poser problème :(
Voici ce que me dit g++ :
XMLException.h:34: error: looser throw specifier for `virtual XMLException::~XMLException()'
/usr/include/g++/exception:56: error: overriding `virtual std::exception::~exception() throw ()'

(en triple exemplaire monsieur !)
voici dans XMLException.cpp la fonction :
const char* XMLException::what() const throw(){
return msg;
}

Bref, comment ça marche ? Son message ne me semble pas très très... clair et mon bouquin sur le C++ est trop vieux pour connaître les exceptions !

Merci d'avance à quiconque pouvant m'aider !
  • # Accolades?

    Posté par (page perso) . Évalué à 2.

    Et si tu enlèves les accolades à la fin de la déclaration du destructeur?
    • [^] # Re: Accolades?

      Posté par (page perso) . Évalué à 3.

      En fait non je dis une connerie. C'est juste que throw doit renvoyer un exception, et et là c'est bizarre avec le what()...
      Voir le polymorphisme des méthodes : si tu surcharges, tu ne peux pas changer la valeur de retour sans changer les paramètres. La fonction surchargée doit avoir le même prototype...
      Mais je suis toujours pas sûr...
  • # throw dans le destructeur

    Posté par . Évalué à 3.

    Déjà pour des raisons d'optimisation, je mettrais const std::exception& message pour le constructeur par parametre de XMLException (au lieu de recopier tout le std::string dans le scope du constructeur, on passe juste la reference).

    Ensuite, il suffit de mettre throw dans le destructeur :
    ~XMLException() throw{};

    Cf : http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/exception-so(...)

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.