Posté le 24/09/2016 à 22:12 Membre depuis le 18/06/2001, -26239 message
pouet,

J'utilise gcc 6.1.1

J'essaye d'utiliser std::exception, qui intelligemment n'a pas de constructeur acceptant une std::string, ni même un bête const char*.
Donc je dérive, pour pouvoir utiliser la méthode const char* what() const, en la redéfinissant :
#include <string>
#include <exception>

using namespace std;

class Exception: public exception
{
    public:
        Exception(const char* message) { this->message = message; }

    private:
        string message;
        const char* what() const override { return this->message; }
};
Et là, j'ai l'erreur looser throw specifier for 'virtual const char* Exception::what() const'.
Google, stackoverflow me donne ça : http://stackoverflow.com/questions/22698653/looser-throw-specifier-in-c
J'essaye ce qui est proposé :
- je compilais déjà avec -std=c++11
- j'ajoute un destructeur virtual (inutile mais c'est pas grave) : ~Exception() throw() {};

Et j'ai toujours la même erreur.

Deux questions :
- que se passe-t-il exactement ? J'ai lu des bouts de la norme à ce sujet, mais je ne comprends pas bien les tenants et aboutissants
- comment corriger ça ?

Merci d'avance pour votre aide. smile

ps -> pour une fois que j'essaye de faire "au plus simple" en utilisant la stl, ben ça commence bien grin
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 24/09/2016 à 23:15 Membre depuis le 10/06/2001, 40014 messages
Il faut rajouter throw() (ou noexcept ou noexcept(true)) aussi à what.

Et sinon, pour faire vraiment au plus simple, tu fais un throw directement de ton const char * sans passer par une std::exception. tongue
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 24/09/2016 à 23:17 Membre depuis le 18/06/2001, -26239 message
Ok, merci.
Evidemment je peux ne pas dériver std::exception, mais je veux catcher mes exceptions avec les standards.
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 24/09/2016 à 23:53 Membre depuis le 10/06/2001, 40014 messages
Tu peux même faire style TI: throw 40;. tongue
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 25/09/2016 à 01:45 Membre depuis le 24/04/2009, 2514 messages
Tu peux carrément throw des strings en brut .... Cébô