#include <iostream>
using namespace std;
int square(int x);
float square(float x);
int main() {
cout<<square(3);
cout<<square(3.14);
return 0;
}
int square(int x) {
cout<<"\nINT version called\n";
return x*x;
}
float square(float x) {
cout<<"\nFLOAT version called\n";
return x*x;
}
我试图用double替换函数的float版本,然后它开始工作。这里有什么问题? 3.14不能被视为浮动吗?
错误:调用过载&#39; square(double)&#39;含糊不清的 注:候选人是:
注意:int square(int)
注意:float square(float)
答案 0 :(得分:8)
C ++中的浮点文字属于double
类型。从double
到int
和float
的转化没有定义排序,因此您的调用不明确。
如果您想调用float
函数,请使用float
字面值调用它:
cout<<square(3.14f);
//note the f here^
答案 1 :(得分:0)
3.14被编译器视为double。它没有找到带有double参数的函数,如果它应该将double转换为int或float,则会感到困惑。因此,请尝试使用下面的代码或在函数声明中使用double。
cout<<square(3.14f);