出现函数重载错误: call of overloaded ‘isnan(double&)’ is ambiguous isnan(x);

因为涉及使用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 的区别是什么

c++ 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);(总结上面的)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值