抛出' char const *'的实例后终止调用错误

时间:2018-03-27 21:02:07

标签: c++

我是编程的新手,当我尝试使用异常处理时,我在代码块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;
}

1 个答案:

答案 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>