c到c ++,在翻译中丢失了

Jer*_*acs 5 c c++ port

我试图将工具从C转换为C++,因此我可以编译为CLR.我是一个.NET家伙,所以这远远超出了我的舒适区.

我在下一行有一个编译错误(告诉我这是不是足够的信息):

if (qvartype[ currQ ] == FLOATING )
    *range *= get_scale( currQ );             /* Make range units match  */
                                              /* data units.             */
Run Code Online (Sandbox Code Playgroud)

currQ是一个short.错误是在get_scale函数上定义的.此功能先前定义为:

#define get_scale( i ) ((short)pow( 10, (int)((long)(cat_names[ i ]))))
Run Code Online (Sandbox Code Playgroud)

...这看起来很荒谬,深入到类型转换地狱,但它确实在C中编译.但是,在C++中,我收到以下错误消息:

Error   374 error C2668: 'pow' : ambiguous call to overloaded function
Run Code Online (Sandbox Code Playgroud)

我理解C不使用重载的概念,但是C++确实如此,并且这个热点上的变量签名使得不清楚调用哪个函数.

我该如何解决?为了最大程度地兼容C++,写这个的正确方法是什么?

haa*_*vee 4

C++ 中没有满足您的调用签名的 pow() 重载版本(int, int)。支持的调用约定之一是(double, int)将您的调用修改为:

pow(10.0, ...)
Run Code Online (Sandbox Code Playgroud)

应该足够了