VS2010 error C2668: “log”: 对重载函数的调用不明确

#include "miinclude.h"

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
if(nrhs!=1)
mexErrMsgTxt("Usage [jointentropy] = progname(jointprob_table).");
if(nlhs > 1)
mexErrMsgTxt("Too many output argument <jointentropy>.");

//check if parameters are correct

long i,j;

double *pab = mxGetPr(prhs[0]);
long pabhei = mxGetM(prhs[0]);
long pabwid = mxGetN(prhs[0]);

double **pab2d = new double * [pabwid];
for(j=0;j<pabwid;j++)
pab2d[j] = pab + (long)j*pabhei;

//calculate the joint entropy

double muInf = 0;

muInf = 0.0;
for (j=0;j<pabwid;j++) // should for pb
{
for (i=0;i<pabhei;i++) // should for pa
{
if (pab2d[j][i]>0) //!=0
{
muInf -= pab2d[j][i] * log(double(pab2d[j][i]));
}
}
}

muInf /= log(2);

plhs[0] = mxCreateDoubleMatrix(1,1, mxREAL);
*mxGetPr(plhs[0]) = muInf;

//free memory
if(pab2d){delete []pab2d;}

return;
}

运行上面的程序会出错,
estcondentropy.cpp(65) : error C2668: “log”: 对重载函数的调用不明确
d:\visual c++\VC\INCLUDE\math.h(575): 可能是“long double log(long double)”
d:\visual c++\VC\INCLUDE\math.h(527): 或 “float log(float)”
d:\visual c++\VC\INCLUDE\math.h(120): 或 “double log(double)”
尝试匹配参数列表“(int)”时
请问要如何修改?谢谢~

d:\visual c++\VC\INCLUDE\math.h(575): 可能是“long double log(long double)”
d:\visual c++\VC\INCLUDE\math.h(527): 或 “float log(float)”
d:\visual c++\VC\INCLUDE\math.h(120): 或 “double log(double)”
都已经提示要如何修改了
~~~~~~~~~~~~~~~~
温馨提示:内容为网友见解,仅供参考
第1个回答  2016-05-11
muInf /= log(2);
改成
muInf /= log((double)(2.0));
出错原因说的够明白了,就不能动下脑本回答被提问者采纳

error C2668: "sqrt": 对重载函数的调用不明确
改成这样 k=int(sqrt((float)m)); 或者 k=int(sqrt((double)m)); vc2008更严格

错误11 error C2668: “pow”: 对重载函数的调用不明确
第一个pow里面的第一个参数是10.0,定义为pow(double , ...)第二个pow里面的第一个参数是10,定义为pow(int , ...)

VS2010 error C2668: “log”: 对重载函数的调用不明确
d:\\visual c++\\VC\\INCLUDE\\math.h(527): 或 “float log(float)”d:\\visual c++\\VC\\INCLUDE\\math.h(120): 或 “double log(double)”都已经提示要如何修改了 ~~~

error C2668: “log10”: 对重载函数的调用不明确 为什么?不是已经进 ...
应该是在"stdafx.h"已经声明数学运算函数,去掉cmath声明试试。

error C2668: “sqrt”: 对重载函数的调用不明确
这是因为pixel是整型吧,需要将参数强制装换成(double),结果自然是double了。result = sqrt((double)( pixel[0] - pixel[3] )*( pixel[0] - pixel[3] ) + ( pixel[1] - pixel[2] )*( pixel[1] - pixel[2] ));

编译时说sqrt对重载函数调用不明确,为什么?
假如原先是这样的:if (sqrt((x0-tx)*(x0-tx)+(y0-ty)*(y0-ty))<r0) \/\/其中参数都是int。运行程序时出现下述错误:error C2668: “sqrt”: 对重载函数的调用不明确。1> d:\\vs2010\\vc\\include\\math.h(581): 可能是“long double sqrt(long double)”1> d:\\vs2010\\vc\\inclu...

error C2668: “sqrt”: 对重载函数的调用不明确 怎么回事?
重载函数二义性,不知道用哪个转换将int转换之后更好,这三个函数都是标准转换,所以一样好。你可以用转换把int类型参数static_cast<T>(x),T可以是float就行,因为它应该足够表示int了。很多VC6下可以运行的程序,到了VC2008下,都不会直接通过,因为VC2008更标准了,VC6应该说有点老了。

error C2668: "sqrt": 对重载函数的调用不明确 2 IntelliSense: 有多...
重载函数二义性,不知道用哪个转换将int转换之后更好。将sqrt调用改为:b = int(sqrt(float(i)));或者 b = int(sqrt(double(i)));

C++中“swap2”: 对重载函数的调用不明确
楼主,你代码没问题,可能是编译器的问题,我用的VS2010运行正常 满意请采纳哦!换一个功能好点的编译器吧

error C2668: “sin”: 对重载函数的调用不明确! error C2668: “c...
include <math.h> define pi 3.14159 int main(){ int x=10;double y,z;while(x<=180){ y=sin(x);\/\/没提示错误 z=cos(x);x+=10;printf("角度:\\t%d\\t正弦:\\t%f\\t余弦:\\t%f\\n",x,y,z);\/\/这里应该是放在循环体内部的 } return 0;} 以上代码在我的VC++6.0上可以正常运行...

相似回答