我正在尝试运行一个简单的代码,当它寻找矢量位置超出范围时会引发错误。但是当我运行代码时,出现错误
#include <iostream>
#include <vector>
using namespace std;
void error()
{
throw(" a standard exception was caught, with message \n");
}
int main() {
try {
cout << "Creating a vector of size 5... \n";
vector<int> v(5);
cout << "Accessing the 11th element of the vector...\n";
cout << v.at(10);
}
catch (const exception& e) {
error();
}
system("PAUSE");
return 0;
}
答案 0 :(得分:2)
error()
函数正确执行。它将在catch
块内引发未处理的异常。修改该函数以捕获并处理异常:
void error() {
try {
throw(" a standard exception was caught, with message \n");
}
catch (char const* e) {
std::cout << "Exception thrown: " << e;
}
}
话虽如此,您可能需要一个简单的方法:
catch (const exception& e) {
std::cout << e.what();
}
相反,不是引发未处理的char const*
异常的函数。
答案 1 :(得分:0)
因此at
函数引发了一个异常,这正是您想要的。它使控制权按预期跳至catch
块,为您采取一些替代/补救措施做好了准备。
但是随后,您从catch
中抛出了另一个异常!没有什么可以处理的。您需要第二对try
/ catch
包裹在整个包裹中才能捕捉到那对(因为这是当您从catch
抛出异常给其他包裹时发生的情况)例外)。
目前尚不清楚您想做什么,但是也许写到std::cerr
就足够了吗?