C++throw异常处理
#include<fstream>#include<stdexcept>#include<iostream>usingnamespacestd;voidread(){if...
#include<fstream>
#include<stdexcept>
#include<iostream>
using namespace std;
void read()
{
ifstream infile("D:\\test.txt");
if(!infile)
{
throw runtime_error err("can't open file");
}
}
int main()
{
try
{
read();
}
catch(runtime_error err)
{
cout<<err.what();
}
return 0;
}
显示编译错误error: expected primary-expression before 'err'|
error: expected ';' before 'err'|
1.为什么
if(!infile)
{
runtime_error err("can't open file");
throw err;
}
就没有错误?
2.我试了一下throw int b;也会出现同样的错误,throw b就没问题
3.如果说throw后面不可加定义变量的表达式,那为什么书上的runtime_error ("can't open file");就没有问题,这条语句不也定义了一个临时变量吗?
哪位大侠帮帮忙!万分感谢! 展开
#include<stdexcept>
#include<iostream>
using namespace std;
void read()
{
ifstream infile("D:\\test.txt");
if(!infile)
{
throw runtime_error err("can't open file");
}
}
int main()
{
try
{
read();
}
catch(runtime_error err)
{
cout<<err.what();
}
return 0;
}
显示编译错误error: expected primary-expression before 'err'|
error: expected ';' before 'err'|
1.为什么
if(!infile)
{
runtime_error err("can't open file");
throw err;
}
就没有错误?
2.我试了一下throw int b;也会出现同样的错误,throw b就没问题
3.如果说throw后面不可加定义变量的表达式,那为什么书上的runtime_error ("can't open file");就没有问题,这条语句不也定义了一个临时变量吗?
哪位大侠帮帮忙!万分感谢! 展开
3个回答
展开全部
throw后面跟一个变量或常量,所以不能写
throw runtime_error err("can't open file");
应该是
runtime_error err("can't open file");
throw err;
即先把err构造出来,然后throw。
追问
非常感谢你的回答!但我还想问
runtime_error ("can't open file");为什么可以,它也定义了一个临时变量。为什么这个可以边定义边throw?
追答
你这语法就不通,你见过函数写return int a(1)的吗?return int(1)是可以的,意思是用1来初始化一个int类型的临时变量。throw也是一个道理,可以用"can't open file"来初始化runtime_error类型的临时变量,应该写
throw runtime_error("can't open file");
展开全部
throw后面不可加变量定义,但返回临时变量的构造函数调用不是变量定义……
就如double a(123)/4;不是合法的语句,而double(123)/4;则是合法的……
就如double a(123)/4;不是合法的语句,而double(123)/4;则是合法的……
追问
非常感谢你的回答!
那么返回临时变量的构造函数,runtime_error ("can't open file");是什么呢?
追答
可以理解成将字符串"can't open file"显式转换成一个runtime_error对象……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
runtime_error ("can't open file")
这个意思是匿名对象
这个意思是匿名对象
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |