c++ - 需要解释一个演示重载函数的简单 C++ 程序中的编译错误

标签 c++

<分区>

我想知道为什么会出现编译错误

call of overloaded 'my_add(double, double, double)' is ambiguous

当我尝试如下重载 my_add 函数时:

//=============== Start of Program ===========
#include <iostream.h>
int my_add( int x, int y , int z) 
   {
    return (x+y+z); 
   }
float my_add( float x, float y , float z) 
   {
    return (x+y+z); 
   }
int main (void)
{
 cout<<my_add(5,6,1);
 cout<<my_add(5.5,6.5,1.0);
} 

//=============== End of Program ===========

但是,当我在 my_add( float x, float y , float z).

我学到的是,对于重载函数,它的定义应该在参数数量、参数顺序或参数类型方面有所不同。

在我的例子中,函数的两个版本在参数类型上有所不同。

我使用的IDE是Code Blocks。

最佳答案

5.5 实际上是一个 double 文字。所以它需要一个转换来匹配你的一个重载。但它可以通过一次转换将两者都匹配,这会导致歧义。

解决方案包括使用 float 字面量 (5.5f) 或转换。将解决方案应用于单个参数就足以解决歧义。

关于c++ - 需要解释一个演示重载函数的简单 C++ 程序中的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41018861/

相关文章:

c++ - 没有 .h 的 header 的 Visual Studio 智能感知

c++ - 元组没有按顺序构建?

c++ - 有符号字节和奇偶校验字节的区别

c++ - 全景影像摄影测量: How to calculate range?

c++ - 模板友元函数: wrong function called

c++ - CMake - 创建一个静态库

c++ - 两个c/c++程序的交互

从指向对象的指针访问运算符 () 的 C++ 语法

c++ - Qt 图像 I/O 和 QPixmap::grabWindow

c++ - 从瑞典语到英语的词汇表测试