#include <iostream>
using namespace std;
int main() {
int i=5;
cout<<"here1";
try
{ if(i==5)
throw ;
cout<<"here2";
}
catch()
{
cout<<"here3";
}
cout<<"here4";
return 0;
}
错误:')'令牌之前的预期类型说明符 抓住() ^
答案 0 :(得分:1)
你应该把它写成:
catch(...)
如果您想要捕获异常,无论它有什么类型。
答案 1 :(得分:1)
是否必须在c ++中的catch块中传递参数?
是的,是的。
catch()
总是需要一个参数或至少一个省略号(与任何未知的异常类型匹配)。来自reference documentation
catch ( attr(optional) type-specifier-seq declarator ) compound-statement (1) catch ( attr(optional) type-specifier-seq abstract-declarator(optional) ) compound-statement (2) catch ( ... ) compound-statement (3)
这对应于throw
语句总是需要一个类型(抛出)的事实。 catch块中的普通throw;
语句会重新抛出当前捕获的异常。
也就是说,throw;
语句(来自catch
块的上下文)和示例中的catch()
签名在编译器报告时无效。
答案 2 :(得分:0)
您可以使用省略号指定任何异常,这也不适用于读取访问冲突或写入访问冲突,并使用它如下:
#include <iostream>
using namespace std;
int main() {
int i=5;
cout<<"here1";
try
{ if(i==5)
throw ;
cout<<"here2";
}
catch(...) //'...' means anything, here any exception
{
cout<<"here3";
}
cout<<"here4";
return 0;
}
我还建议使用这样的通用std::exception
类:
catch (const std::exception& e)
{
std::cerr << e.what();
}
答案 3 :(得分:0)
Catch-all处理程序,为任何异常激活
try {
/* */
}
catch (...) {
/* */
}