在以下程序中,即使我有适用的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
,然后我收到此错误:
为什么abort
即使在我处理string
例外时也会被调用?
答案 0 :(得分:14)
非常简单!
你扔了char const*
,但没有匹配的catch
。
您的意思是throw std::string("...");
吗?
答案 1 :(得分:1)
是的,你需要捕获一个char const *,而不是一个std :: string!
答案 2 :(得分:1)
除了其他答案所说的,作为一般建议:只抛出从std::exception
派生的内容,如果没有别的,在你的顶级处理程序中,抓住std::exception&
或{{1} }。这将有例如避免这种情况。另见
答案 3 :(得分:0)
将类型更改为char*
,并按预期工作。