
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");

2022-08-05 广告
苏州蓝晓生物科技有限公司。标准化核心产品:公司拥有完整的琼脂糖介质、葡聚糖介质、聚甲基丙烯酸酯介质生产线,年产分离介质50000L,产品质量稳定并达到国际领先水平。核心优势:公司核心技术人员拥有近二十年不同基质的基球开发和官能化的丰富技术经...
点击进入详情页
本回答由苏州蓝晓生物科技有限公司_提供
展开全部
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")
这个意思是匿名对象
这个意思是匿名对象
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询