如何解决“fpclassify”:对重载函数的模糊调用
How to resolve "fpclassify': ambiguous call to overloaded function
我是 C++ 的新手。我被赋予了安装模拟的任务,但我将 运行 保留为错误代码。我能够解决大部分问题,但有一个我不确定如何解决。
错误代码为C2668
,其描述为:
"fpclassify': ambiguous call to overloaded function
项目是“运行 Simulation”,文件是第 415 行 corecrt_math.h
。
老实说,我不确定我提供的任何信息是否有任何用处,我也不确定提供什么信息。如果你能问我一些问题,我会尽力回答,也许会更好?
我附上了我的 Visual Studio 19:
的截图
(点击图片放大)
可重现的例子(demo)
#include <cmath>
int main() {
std::isnan(1);
}
预期结果:编译。
您可能以某种方式输入 std::fpclassify
一个整数。 Visual Studio 的 <cmath>
函数的整数重载存在问题,它会像您的情况一样表现出来,而不是根据以下内容将整数转换为 double
:
[…] if any argument of arithmetic type corresponding to a double
parameter has type double
or an integer type, then all arguments of arithmetic type corresponding to double
parameters are effectively cast to double
.
我写了一个 error report for std::signbit
但它对我测试过的所有 <cmath>
函数都是一样的,std::fpclassify
就是其中之一 - 它被许多其他 cmath
函数。
corecrt_math.h
中的第 415 行在内部调用 fpclassify
的 isnan
函数中。
解决问题的步骤:
- 构建项目时,您会在 错误列表 框中获得错误列表。查找显示
see reference to function template instantiation 'bool isnan<int>(_Ty) noexcept' being compiled
或类似内容的行。 <int>
部分可以是任何整数类型。
- 双击该行,IDE 应将光标置于对
isnan
的调用上,该调用使用整数进行。
- 将
isnan(
integer
)
调用替换为 isnan(static_cast<double>(
integer
))
.
- 对导致问题的任何其他
cmath
函数重复这些步骤。
注意:对整数使用 isnan
是没有意义的。 isnan(
integer
)
将始终 return false
因此打开优化的编译器应将整个调用替换为false
。
我是 C++ 的新手。我被赋予了安装模拟的任务,但我将 运行 保留为错误代码。我能够解决大部分问题,但有一个我不确定如何解决。
错误代码为C2668
,其描述为:
"fpclassify': ambiguous call to overloaded function
项目是“运行 Simulation”,文件是第 415 行 corecrt_math.h
。
老实说,我不确定我提供的任何信息是否有任何用处,我也不确定提供什么信息。如果你能问我一些问题,我会尽力回答,也许会更好?
我附上了我的 Visual Studio 19:
的截图(点击图片放大)
可重现的例子(demo)
#include <cmath>
int main() {
std::isnan(1);
}
预期结果:编译。
您可能以某种方式输入 std::fpclassify
一个整数。 Visual Studio 的 <cmath>
函数的整数重载存在问题,它会像您的情况一样表现出来,而不是根据以下内容将整数转换为 double
:
[…] if any argument of arithmetic type corresponding to a
double
parameter has typedouble
or an integer type, then all arguments of arithmetic type corresponding todouble
parameters are effectively cast todouble
.
我写了一个 error report for std::signbit
但它对我测试过的所有 <cmath>
函数都是一样的,std::fpclassify
就是其中之一 - 它被许多其他 cmath
函数。
corecrt_math.h
中的第 415 行在内部调用 fpclassify
的 isnan
函数中。
解决问题的步骤:
- 构建项目时,您会在 错误列表 框中获得错误列表。查找显示
see reference to function template instantiation 'bool isnan<int>(_Ty) noexcept' being compiled
或类似内容的行。<int>
部分可以是任何整数类型。 - 双击该行,IDE 应将光标置于对
isnan
的调用上,该调用使用整数进行。 - 将
isnan(
integer
)
调用替换为isnan(static_cast<double>(
integer
))
. - 对导致问题的任何其他
cmath
函数重复这些步骤。
注意:对整数使用 isnan
是没有意义的。 isnan(
integer
)
将始终 return false
因此打开优化的编译器应将整个调用替换为false
。