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