系统相关
首页 > 系统相关> > c-在Windows上为Matlab构建libspline-对重载函数’pow’的歧义调用

c-在Windows上为Matlab构建libspline-对重载函数’pow’的歧义调用

作者:互联网

我正在尝试在Windows上为Matlab构建libspline,可从此处获取:

http://ttic.uchicago.edu/~smaji/projects/libspline-release1.0.tar.gz

我收到以下错误:

>> make
additiveModel.cpp 
additiveModel.cpp(156) : error C2668: 'pow' : ambiguous call to overloaded function 
        C:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\math.h(583): could be 'long double pow(long double,int)' 
        C:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\math.h(535): or       'float pow(float,int)' 
        C:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\math.h(497): or       'double pow(double,int)' 
        while trying to match the argument list '(int, int)' 

  C:\USR\ML\MATLAB~1\BIN\MEX.PL: Error: Compile of 'additiveModel.cpp' failed. 

??? Error using ==> mex at 208
Unable to complete successfully.

Error in ==> make at 4
mex -O -largeArrayDims -c additiveModel.cpp

如何解决?

解决方法:

AdditiveModel.cpp中的第156行是这样的:

dimwts[2*i] = 1.0/pow(i+1,reg);

在这里,您可以看到传递给pow的两个参数都是int.由于math.h中没有pow的重载,它需要两个整数,因此重载解析失败,因为在这种情况下最佳可行函数不是唯一的.

您可以通过将第一个参数转换为合适的类型(例如double)来解决此问题:

dimwts[2*i] = 1.0/pow(static_cast<double>(i+1),reg);

标签:c,matlab,visual-studio,overload-resolution
来源: https://codeday.me/bug/20191011/1893895.html