我正在尝试在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
。由于pow
中没有math.h
的重载,而这会占用两个int
,因此重载解析失败,因为在这种情况下最佳可行函数不是唯一的。您可以通过将第一个参数转换为合适的类型来解决此问题,例如
double
:dimwts[2*i] = 1.0/pow(static_cast<double>(i+1),reg);