在我的代码中,我想抛出一条消息,因此当发现输入时它会出现在屏幕上。我想这样做,但它没有用。所以,我希望你的帮助,看看是否有任何我不知道的事情,或者它是否是C ++中的非法行为。
这是我的代码中出现throw的地方(类函数成员实现)
//set the value of _s (seconds)
void Time::setSeconds(int s){
if (s > 60 || s < 0)
throw ("The value inside seconds has to be valid");
else
_s = s;
}
这就是我设法创建一个简单的try-catch块的方法
try{
Time t(12,4,-12);
t.printStandard();
}catch(string const &a){
cerr << a;
}
但是,当程序运行时,我收到以下错误消息:
terminate called after throwing an instance of 'char const*'
Aborted (core dumped)
这显然不是预期的。
答案 0 :(得分:0)
评论中的人帮我解决了这个问题:
当使用带有文本的throw时,编译器会将其视为const char*
。在代码中,catch期望string const&
。发生错误是因为,正如干杯和赫斯所说的那样。 - Alf
转换不被视为异常捕获
答案 1 :(得分:0)
您的 catch 语句需要指定const char*
:
catch(const char* a)
{
. . .
}
答案 2 :(得分:0)
你正在抛出一个char*
指针,但试图抓住一个std::string
对象。所以抛出的异常没有被抓住。未捕获的异常会导致调用terminate()
,从而终止进程。
所以,你需要:
开始std::string
开始:
void Time::setSeconds(int s){
if (s > 60 || s < 0)
throw std::string("The value inside seconds has to be valid");
_s = s;
}
或
捕获const char*
指针:
catch(const char *a)
话虽如此,更好的方法是抛出standard STL exception class,例如std::out_of_range
,例如:
#include <stdexcept>
//set the value of _s (seconds)
void Time::setSeconds(int s){
if (s > 60 || s < 0)
throw std::out_of_range("The value inside seconds has to be valid");
_s = s;
}
...
try {
Time t(12,4,-12);
t.printStandard();
}
catch(std::exception const &a) {
cerr << a.what();
}