【发布时间】:2015-05-02 14:35:45
【问题描述】:
我正在重载函数add(),但是当我使用float 数据类型时,它显示错误。但是,当我将其更改为double 时,它工作正常。为什么float 会导致错误?
代码是:
#include <iostream>
using namespace std;
class students{
private:
int i;
float f;
public:
void add(int b){
i=b;
cout << "First Int: " << i;
}
void add(float c){
f=c;
cout << "Second Int: " << f;
}
};
int main(){
students obj;
obj.add(9);
obj.add(5.5);
}
错误:
In function 'int main()':
[Error] call of overloaded 'add(double)' is ambiguous
[Note] candidates are:
[Note] void students::add(int)
[Note] void students::add(float)
【问题讨论】:
-
将
obj.add(5.5);更改为obj.add(5.5f);。 -
5.5 是双精度而非浮点数。
5.5f是一个浮点数。 -
Oooh Waoo Great, little change.. 你能解释一下f在float中的区别吗?
-
既然您对正在发生的事情感到困惑,那么显然只有两种方法仅通过参数类型来区分,但做不同的事情,是一个非常非常糟糕的主意。现在考虑一下,例如 size_t 在不同的实现中可能是 unsigned int、long 或 long long,所以如果你进行这种重载,f (sizeof (1)) 可能会调用不同的方法!
标签: c++ overloading ambiguous