почему вызывается метод abort? - PullRequest
6 голосов
/ 01 июля 2011

В следующей программе abort метод вызывается, даже когда я получил соответствующий оператор catch.В чем причина?

#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";
}

Когда я запускаю программу, отображается только первое утверждение inside try, а затем я получаю эту ошибку:

enter image description here

Почему abort вызывается, даже когда я обрабатываю string исключение?

Ответы [ 4 ]

14 голосов
/ 01 июля 2011

Довольно просто на самом деле!

Вы бросили char const*, но у вас нет соответствующего catch.

Вы имели в виду throw std::string("...");?

1 голос
/ 01 июля 2011

Кроме того, что говорят другие ответы, в качестве общего совета: бросайте только то, что получено из std::exception, и, если ничего, в ваш топ-обработчик, ловите std::exception& или const std::exception&. Это было бы, например, избежал этой ситуации. Смотри также

1 голос
/ 01 июля 2011

Да, вам нужно перехватывать символьную константу *, а не std :: string!

0 голосов
/ 01 июля 2011

измените тип на char* и он будет работать как положено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...