如何解决“fpclassify”:对重载函数的不明确调用

pat*_*ck7 3 c++ windows cmath visual-studio-2019

我和其他人一样对 C++ 很陌生。我接到了安装模拟的任务,但我不断遇到错误代码。我能够解决其中的大部分问题,但有一个我不确定如何解决。

错误代码为C2668,错误描述为:

“fpclassify”:对重载函数的不明确调用

项目是“运行模拟”,文件corecrt_math.h位于第 415 行。

老实说,我不确定我提供的任何信息是否有任何用处,我也不确定要提供哪些信息。如果你能问我一些问题,我能尽我所能回答,也许会更好?

我提供了 Visual Studio 19 的屏幕截图:

视觉工作室

(点击图片可放大)

可重现的示例(演示

#include <cmath>

int main() {
    std::isnan(1);
}
Run Code Online (Sandbox Code Playgroud)

预期结果:编译。

Ted*_*gmo 7

您可能std::fpclassify以某种方式输入了一个整数。Visual Studio 存在函数的整数重载问题,就像您的情况一样,而不是按照以下方式<cmath>将整数强制转换为 a :double

\n\n

c.math.syn#2.2

\n\n
\n

[\xe2\x80\xa6] 如果与形参对应的算术类型的任何实参double具有类型double 或整数类型,则与形参对应的所有算术类型实参double都有效地转换为double

\n
\n\n

我编写了一份错误报告,std::signbit<cmath>但它对于我测试过的 所有函数都是相同的,并且std::fpclassify是其中之一 - 并且它被许多其他cmath函数内部使用。

\n\n

第 415 行corecrt_math.h位于内部isnan调用的函数内fpclassify

\n\n

解决问题的步骤:

\n\n
    \n
  • 当您构建项目时,您将在错误列表框中看到错误列表。寻找显示see reference to function template instantiation \'bool isnan<int>(_Ty) noexcept\' being compiled或类似的线条。该<int>部分可以是任何整数类型。
  • \n
  • 双击该行,IDE 应将光标放在对isnan整数进行的调用上。
  • \n
  • 将呼叫替换为.isnan(integer)isnan(static_cast<double>(integer))
  • \n
  • 对于引起问题的任何其他cmath功能,请重复这些步骤。
  • \n
\n\n

注意:使用isnan整数是没有意义的。将始终返回,因此打开优化的编译器应将整个调用替换为.isnan(integer)falsefalse

\n