我是编程的新手,当我尝试使用异常处理时,我在代码块16:01中收到错误
在抛出' char const *'
的实例后终止调用这是错误。
有人可以帮我解决这个错误,我试图将IDE重置为默认值,但没有工作
代码是
#include <iostream>
#include <cmath>
#include <stdexcept>
using namespace std;
double sqrt(double num)
{
if(num < 0)
throw "Negative number is not allowed";
double x = pow(num,0.5);
return x;
}
int main()
{
double x;
cout <<"Enter a number : ";
cin >> x;
double num;
try
{
num = sqrt(x);
}
catch(const char *text)
{
cout << "ERROR : "<<text<<endl;
return 1;
}
cout <<"Square root of "<< num <<" is : "<<num;
return 0;
}
答案 0 :(得分:2)
无论导致错误的实现细节如何,您的程序都有未定义的行为,因为您正在使用C库中的保留函数签名。
http://eel.is/c++draft/reserved.names#2
如果程序在上下文中声明或定义名称 保留,除非本条款明确允许,否则 行为未定义。
http://eel.is/c++draft/reserved.names#extern.names-4
来自C标准库的每个函数签名都声明了 外部链接保留给实现以用作 具有
extern "C"
和extern "C++"
链接的函数签名, 或者作为全局命名空间中命名空间作用域的名称。
在您的特定实例中,您的编译器库看起来像sqrt
定义为noexcept
,但最终会使用您提供的定义抛出,导致调用terminate
。< / p>