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)
预期结果:编译。
您可能std::fpclassify以某种方式输入了一个整数。Visual Studio 存在函数的整数重载问题,就像您的情况一样,而不是按照以下方式<cmath>将整数强制转换为 a :double
\n\n\n[\xe2\x80\xa6] 如果与形参对应的算术类型的任何实参
\ndouble具有类型double或整数类型,则与形参对应的所有算术类型实参double都有效地转换为double。
我编写了一份错误报告,std::signbit<cmath>但它对于我测试过的 所有函数都是相同的,并且std::fpclassify是其中之一 - 并且它被许多其他cmath函数内部使用。
第 415 行corecrt_math.h位于内部isnan调用的函数内fpclassify。
解决问题的步骤:
\n\nsee reference to function template instantiation \'bool isnan<int>(_Ty) noexcept\' being compiled或类似的线条。该<int>部分可以是任何整数类型。isnan整数进行的调用上。isnan(integer)isnan(static_cast<double>(integer))cmath功能,请重复这些步骤。注意:使用isnan整数是没有意义的。将始终返回,因此打开优化的编译器应将整个调用替换为.isnan(integer)falsefalse