我试图将工具从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++,写这个的正确方法是什么?
C++ 中没有满足您的调用签名的 pow() 重载版本(int, int)。支持的调用约定之一是(double, int)将您的调用修改为:
pow(10.0, ...)
Run Code Online (Sandbox Code Playgroud)
应该足够了