我正在尝试将一个工具从C语言转换成C++,以便作为CLR编译。我是一名.NET开发者,所以这远超出了我的舒适区。
我在以下代码行上遇到了编译错误(如果这不足够,请告诉我):
我知道C语言没有重载的概念,但是C++有,而这个混乱的变量签名使得不清楚应该调用哪个函数。
我该如何解决这个问题?为了最大程度地兼容C++,应该如何正确编写代码?
我在以下代码行上遇到了编译错误(如果这不足够,请告诉我):
if (qvartype[ currQ ] == FLOATING )
*range *= get_scale( currQ ); /* Make range units match */
/* data units. */
currQ
是一个 short
类型。错误定义在 get_scale
函数中。该函数在之前被定义为:
#define get_scale( i ) ((short)pow( 10, (int)((long)(cat_names[ i ]))))
我觉得下面的代码看起来很荒谬,在类型转换的地狱深处,但它在C中确实可以编译。然而,在C++中,我会收到以下错误消息:
Error 374 error C2668: 'pow' : ambiguous call to overloaded function
我知道C语言没有重载的概念,但是C++有,而这个混乱的变量签名使得不清楚应该调用哪个函数。
我该如何解决这个问题?为了最大程度地兼容C++,应该如何正确编写代码?
get_scale
不是一个函数,而是一个宏。 - Borgleader#include <math.h>
或者#include <cmath>
或者两者都包含,是否使用using namespace std;
(不推荐),以及工具链的不同而有所不同。这真的很丑陋。最简单的方法是使类型与 C 的pow()
函数匹配,这样就总是选择 C 函数。 - Ben Voigtpow
函数更快。即使你使用整数,我也会这样做,因为有些pow
函数的实现存在轻微的舍入误差。 - PaulMcKenzielong
数组来替换缩放数组cat_names
,以消除整个可怕的结构。 - Jongware