6 votes

pourquoi la méthode abort est-elle appelée ?

Dans le programme suivant abort est appelée même si j'ai obtenu l'instruction catch applicable. Quelle en est la raison ?

#include <iostream>
#include <string>
using namespace std;

int main() {

    try {
        cout << "inside try\n";
        throw "Text";
    }
    catch (string x) {
        cout << "in catch" << x << endl;
    }

    cout << "Done with try-catch\n";
}

Lorsque j'exécute le programme, je n'obtiens que la première déclaration. inside try s'affiche, puis je reçois cette erreur :

enter image description here

Pourquoi est-ce que abort sont appelés même lorsque je manipule string exception ?

14voto

Lightness Races in Orbit Points 122793

C'est vraiment très simple !

Vous avez jeté char const* mais n'ont pas de correspondance catch pour cela.

Voulez-vous dire throw std::string("..."); ?

1voto

MGZero Points 3088

Oui, vous devez attraper un char const*, pas une std::string !

1voto

phresnel Points 20082

En dehors de ce que les autres réponses disent, comme un conseil général : Ne jetez que ce qui est dérivé de std::exception et si rien d'autre n'est fait, dans votre top-handler, attraper std::exception& o const std::exception& . Cela aurait par exemple permis d'éviter cette situation. Voir aussi

0voto

Azodious Points 8187

Changer le type en char* et cela fonctionne comme prévu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X