C++ 具有相同函数名的Segfault。为什么?如何修复?

C++ 具有相同函数名的Segfault。为什么?如何修复?,c++,segmentation-fault,C++,Segmentation Fault,我知道,通过更改trig函数名,我摆脱了segfault。然而,我并不完全清楚为什么。我的猜测是我在实现中得到了递归调用。有人能在这里给出一个严格的解释吗 此外,我愿意保持这种方式,因此我想知道应该添加/修改什么以保持函数名称不变 P.S.S.:我知道这是一个愚蠢的问题,只是在这里开始C++,所以请容忍我。p> 代码: 你明白了,递归调用。我想你想要 静态双sindouble x{return::sinM_PI*x;} 使用scope resolution操作符::将使您的sin函数调用全局si

我知道,通过更改trig函数名,我摆脱了segfault。然而,我并不完全清楚为什么。我的猜测是我在实现中得到了递归调用。有人能在这里给出一个严格的解释吗

此外,我愿意保持这种方式,因此我想知道应该添加/修改什么以保持函数名称不变

P.S.S.:我知道这是一个愚蠢的问题,只是在这里开始C++,所以请容忍我。p> 代码:


你明白了,递归调用。我想你想要

静态双sindouble x{return::sinM_PI*x;}

使用scope resolution操作符::将使您的sin函数调用全局sin函数,而不是递归调用您的函数

顺便说一句,如果你想把度转换成弧度,那么你实际上需要


静态双sindouble x{return::sinM_PI/180.0*x;}

你明白了,递归调用。我想你想要

静态双sindouble x{return::sinM_PI*x;}

使用scope resolution操作符::将使您的sin函数调用全局sin函数,而不是递归调用您的函数

顺便说一句,如果你想把度转换成弧度,那么你实际上需要

静态双sindouble x{return::sinM_PI/180.0*x;}

1在包含之前,您应该定义\u使用\u数学\u定义

你的计算函数确实包含了他们自己调用的无限递归。您需要按如下方式更改它们:

static double sin(double x){ return std::sin(M_PI*x); }
也就是说,限定对sin的调用,以明确您要调用全局调用。

1在包含之前,您应该定义\u使用\u数学\u定义

你的计算函数确实包含了他们自己调用的无限递归。您需要按如下方式更改它们:

static double sin(double x){ return std::sin(M_PI*x); }

也就是说,对sin的调用进行限定,以明确您要调用全局调用。

,所以我删除了它,所以我删除了它。或者更好的是,扔掉using指令并编写std::sin。好的,这个M_PI注释很好,那么最好的选项是什么?使用atan?@den javamaniac进行预计算:您可以。当约翰有时间思考的时候,也许他会把关于它的评论放回去。有希望地但在此之前,我最好在评论中提到,M_PI是非标准的,但却是一个常见的扩展。@cheers-sandhth.-Alf最近有人编辑了我的答案好几次。不是纠正它们,而是“改进”它们。我不喜欢它。同样在这样做的时候,你压扁了我自己做的编辑。像比约恩这样的评论似乎是建议改正或改进的更好方式。@john:这是一个协作网站。所以,如果人们能改进我的帖子,我将感激不尽。虽然还没有发生。。。无论如何,比约恩的评论是关于风格和个人偏好的,因此,将其放在其他人的答案中是绝对错误的。关于M_-PI的信息是关于国际标准定义的关键物质。或者更好的是,扔掉using指令并编写std::sin。好的,这个M_-PI注释很好,那么最好的选择是什么?使用atan?@den javamaniac进行预计算:您可以。当约翰有时间思考的时候,也许他会把关于它的评论放回去。有希望地但在此之前,我最好在评论中提到,M_PI是非标准的,但却是一个常见的扩展。@cheers-sandhth.-Alf最近有人编辑了我的答案好几次。不是纠正它们,而是“改进”它们。我不喜欢它。同样在这样做的时候,你压扁了我自己做的编辑。像比约恩这样的评论似乎是建议改正或改进的更好方式。@john:这是一个协作网站。所以,如果人们能改进我的帖子,我将感激不尽。虽然还没有发生。。。无论如何,比约恩的评论是关于风格和个人偏好的,因此,将其放在其他人的答案中是绝对错误的。关于M_PI的信息是关于国际标准定义的关键物质。定义用什么来定义?看起来它是特定于实现的。是的,它是特定于实现的,但好吧,很多编译器都支持它。如果在包含之前定义“使用数学”定义,那么像M\u PI这样的定义将在内部定义。定义“使用数学”定义做什么?看起来它是特定于实现的。是的,它是特定于实现的,但好吧,很多编译器都支持它。如果您在包含之前定义了(使用)数学(mu MATH)定义,那么像M_PI这样的定义将在内部定义。