Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在抛出';字符常量*';错误_C++ - Fatal编程技术网

C++ 在抛出';字符常量*';错误

C++ 在抛出';字符常量*';错误,c++,C++,我是编程新手,当我尝试使用异常处理时,我在代码块16:01中遇到了一个错误 在抛出“char const*”实例后调用terminate 这就是错误所在 有人能帮我解决这个错误吗?我试图将IDE重置为默认值,但没有成功 代码是 #include <iostream> #include <cmath> #include <stdexcept> using namespace std; double sqrt(double num) { if(num

我是编程新手,当我尝试使用异常处理时,我在代码块16:01中遇到了一个错误

在抛出“char const*”实例后调用terminate

这就是错误所在

有人能帮我解决这个错误吗?我试图将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;
}
#包括
#包括
#包括
使用名称空间std;
双sqrt(双数值)
{
if(num<0)
抛出“不允许使用负数”;
双x=功率(数值,0.5);
返回x;
}
int main()
{
双x;
cout x;
双数;
尝试
{
num=sqrt(x);
}
捕获(常量字符*文本)
{

cout无论导致错误的实现细节如何,您的程序都有未定义的行为,因为您使用的是来自C库的保留函数签名

如果程序在其所在的上下文中声明或定义名称 除本条款明确允许外,其 行为是未定义的

C标准库中的每个函数签名都声明为 外部链接保留给实现,用作 带有
extern“C”
extern“C++”
链接的函数签名, 或作为全局命名空间中命名空间作用域的名称


在您的特定实例中,它看起来像编译器的库将
sqrt
定义为
noexcept
,但最终使用您提供的确实抛出的定义,导致调用
terminate

创建一个。@NeilButterworth
抛出“不允许使用负数”;
@Barmar我猜他是在选择std::sqrt函数,它不会抛出。我真的很惊讶函数调用不明确不会出错。@user657267重新定义不应该是一个硬错误,而不是UB吗?