函数重载二义性:error C2668: 'pow' : ambiguous call to overloaded function
2013-07-08 14:49
471 查看
2013-07-08 14:42:45
当使用的函数时重载函数时,若编译器不能判断出是哪个函数,就会出现二义性,并给出报错信息。
问题描述:
在.cpp代码中用到pow函数,如下:
long int MaxInteger = pow( 2,8*sizeof(long int) -1 );
编译,报错为:
error C2668: 'pow' : ambiguous call to overloaded function
error C2668: 'pow' : ambiguous call to overloaded function
1> d:\program files\microsoft visual studio 10.0\vc\include\math.h(583): could be 'long double pow(long double,int)'
1> d:\program files\microsoft visual studio 10.0\vc\include\math.h(581): or 'long double pow(long double,long double)'
1> d:\program files\microsoft visual studio 10.0\vc\include\math.h(535): or 'float pow(float,int)'
1> d:\program files\microsoft visual studio 10.0\vc\include\math.h(533): or 'float pow(float,float)'
1> d:\program files\microsoft visual studio 10.0\vc\include\math.h(497): or 'double pow(double,int)'
1> d:\program files\microsoft visual studio 10.0\vc\include\math.h(122): or 'double pow(double,double)'
根据给出的信息,可知pow函数有6种重载函数,编译器根据给定的参数不能判断代码中使用的是哪个函数,因此报错。
解决办法:
可通过指定参数的类型解决,如下:
MaxInteger = (long int) pow( (float)2,(int)( 8*sizeof(long int) - 1 ) )
这样,编译器就直达是要用'long double pow(long double,int)'这个函数了。
当使用的函数时重载函数时,若编译器不能判断出是哪个函数,就会出现二义性,并给出报错信息。
问题描述:
在.cpp代码中用到pow函数,如下:
long int MaxInteger = pow( 2,8*sizeof(long int) -1 );
编译,报错为:
error C2668: 'pow' : ambiguous call to overloaded function
error C2668: 'pow' : ambiguous call to overloaded function
1> d:\program files\microsoft visual studio 10.0\vc\include\math.h(583): could be 'long double pow(long double,int)'
1> d:\program files\microsoft visual studio 10.0\vc\include\math.h(581): or 'long double pow(long double,long double)'
1> d:\program files\microsoft visual studio 10.0\vc\include\math.h(535): or 'float pow(float,int)'
1> d:\program files\microsoft visual studio 10.0\vc\include\math.h(533): or 'float pow(float,float)'
1> d:\program files\microsoft visual studio 10.0\vc\include\math.h(497): or 'double pow(double,int)'
1> d:\program files\microsoft visual studio 10.0\vc\include\math.h(122): or 'double pow(double,double)'
根据给出的信息,可知pow函数有6种重载函数,编译器根据给定的参数不能判断代码中使用的是哪个函数,因此报错。
解决办法:
可通过指定参数的类型解决,如下:
MaxInteger = (long int) pow( (float)2,(int)( 8*sizeof(long int) - 1 ) )
这样,编译器就直达是要用'long double pow(long double,int)'这个函数了。
相关文章推荐
- error C2668: 'abs' : ambiguous call to overloaded function
- 关于sqrt函数 error C2668: 'sqrt' : ambiguous call to overloaded function
- error C2668: ‘pow’ : ambiguous call to overloaded function
- error C2668: ‘sqrt’ : ambiguous call to overloaded function
- ambiguous call to overloaded function 两种情况的错误分析及解决方法
- ambiguous call to overloaded function错误分析及解决方法
- ambiguous call to overloaded function解决的办法
- ambiguous call to overloaded function
- 'sqtr'ambiguous call to overloaded function
- C2668: 'sqrt' : ambiguous call to overloaded function(sqrt问题)
- 【关于DrawLine' : ambiguous call to overloaded function解决办法】
- error C2668: 'sqrt' : ambiguous call to overloaded
- error: no matching function for call to ‘ptr_fun(<unresolved overloaded function type>)’
- Qt error ------ no matching function for call to QObject::connect(QSpinBox*&, <unresolved overloaded function type>, QSlider*&, void (QAbstractSlider::*)(int))
- error: no matching function for call to ‘boost::thread::thread(<unresolved overloaded function type>
- c++引用标准c库close出错 error: too many arguments to function call, expected 0, have 1
- C++ STL string 大小写转换时的 no matching function for call to ‘transform 错误
- 解决PHP中的Fatal error: Call to undefined function curl_init()
- PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 的解决方法
- 遭遇了"Call to undefined function socket_create()"