【问题标题】:Overloaded C++ function float parameters error [duplicate]重载 C++ 函数浮点参数错误 [重复]
【发布时间】:2018-04-14 21:26:33
【问题描述】:

我一直在编写一对重载的 C++ 函数,一个接受 2 个整数参数,另一个接受 2 个浮点数。

但是代码块编译器说:

error: call of overloaded 'func(double, double)' is ambiguous

如果我指定float,为什么要double

我正在使用这两个函数来求和它们的值并在它们内部的cout 上显示结果。作为参数给出的浮点值是 1.14 和 3.33,不是很大的浮点数...

有人知道吗?谢谢!

#include <iostream>
using namespace std;

void func(int a, int b) {
    cout << a+b;
}

void func(float a, float b) 
    cout << a+b;
}

int main() {
  func(3, 7);
  func(1.14, 3.33);

}

【问题讨论】:

  • 你的代码在哪里?
  • 因为 C++ 指定浮点值被提升为双精度值。
  • 那么浮动值提升为双倍有什么想法?
  • double 不是float。使用double 参数调用任一函数都需要转换,并且两次转换具有相同的等级,因此调用不明确。

标签: c++ compiler-errors floating-point overloading


【解决方案1】:

函数调用func(1.14, 3.33) 是不明确的,因为1.143.33 是双精度的,两者都可以转换为intfloat。因此编译器不知道调用哪个函数。

您可以通过显式指定常量func(float(1.14), float(3.33)) 的类型或将重载从func(float, float) 更改为func(double, double) 来解决此问题。

在这种情况下,明确告诉编译器使用哪种类型可能是一个更好的主意。

【讨论】:

  • 因为它们是文字,你可以使用 1.14f3.33f
猜你喜欢
  • 1970-01-01
  • 2018-07-23
  • 1970-01-01
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多