为什么叫中止方法?

时间:2011-07-01 13:25:34

标签: c++ exception

在以下程序中,即使我有适用的catch语句,也会调用abort方法。是什么原因?

#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 个答案:

答案 0 :(得分:14)

非常简单!

你扔了char const*,但没有匹配的catch

您的意思是throw std::string("...");吗?

答案 1 :(得分:1)

是的,你需要捕获一个char const *,而不是一个std :: string!

答案 2 :(得分:1)

除了其他答案所说的,作为一般建议:只抛出从std::exception派生的内容,如果没有别的,在你的顶级处理程序中,抓住std::exception&或{{1} }。这将有例如避免这种情况。另见

答案 3 :(得分:0)

将类型更改为char*,并按预期工作。