因为涉及使用VS(VC++) 改以后的程序移植到Eclipse(Linux中C++)中,使用从Windows到Linux的系统,主要是随着C++版本和库的不同,在函数的使用上面有差别。
原因分析
出现函数重载的原因可能因为函数无法辨别出到底使用哪个类型的定义,例如下面的例子
出现函数重载错误call of overloaded ‘printfSth(double)’ is ambiguous
具体的代码如下:
class C:
{
public:
void printfSth(int i)
{
cout<<"C::printfSth(int i):"<<i<<endl;
}
void printfSth(float i)
{
cout<<"C::printfSth(float i):"<<i<<endl;
}
};
int main()
{
A* a = new A();
a->printfSth();
C* c=new C();
c->printfSth(1.1);
}
原因在与c++,默认将小数认为是double类型,在上面程序调用时,double类型需要做类型转换但是转成float还是int,编译器不知道。
也有可能性是因为你自己写的函数与标准库的函数出现冲突了,当你明确好使用你自己定义的还是标准库里面的函数时,这样明确清楚以后就不会出现这个问题了。
例如下面的这个max函数的例子:
Qt5.3编译错误——call of overloaded ‘max(int int)’is ambiguous
解决办法:
针对isnan 与 isinf 的区别是什么
针对call of overloaded ‘isnan(double&)’ is ambiguous isnan(x)的解决方式:
有两种办法,通过调用 :: isnan或std :: isnan来明确限定isnan,确定好使用哪种类型的isnan函数,就是直接在编写的程序前面加上
:: isnan
或者
std :: isnan
来解决这个问题。
感谢下面博主的分享:
Why is isnan ambiguous and how to avoid it?
(根本的原因分析)
编译错误: call of overloaded ‘isnan(double&)’ is ambiguous isnan(x);(总结上面的)