Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 需要用简单的C++;演示重载函数的程序_C++ - Fatal编程技术网

C++ 需要用简单的C++;演示重载函数的程序

C++ 需要用简单的C++;演示重载函数的程序,c++,C++,我想知道为什么会出现编译错误 重载“my_add(double,double,double)”的调用不明确 当我试图重载我的_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 ,

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

重载“my_add(double,double,double)”的调用不明确

当我试图重载我的_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 ===========
/======================程序开始===========
#包括
int my_add(int x,int y,int z)
{
返回(x+y+z);
}
浮动my_add(浮动x、浮动y、浮动z)
{
返回(x+y+z);
}
内部主(空)
{

cout
5.5
实际上是一个
double
文本。因此它需要一个转换来匹配一个重载。但是它可以通过一个转换来匹配这两个重载,这会导致歧义


解决方案包括使用
float
literal(
5.5f
),或强制转换。即使对单个参数应用解决方案也足以解决歧义。

5.5
实际上是一个
文本。因此它需要一个转换来匹配其中一个重载。但它可以通过一个转换同时匹配这两个参数,从而导致歧义



解决方案包括使用
float
literal(
5.5f
)或强制转换。即使将解决方案应用于单个参数,也足以解决歧义。

5.0
是双精度(
5.0f
用于float)。因此,这些需要转换,并且由于
int
float
都是有效的候选者,因此重载是不明确的。亲爱的Michael,我没有得到“因为int和float`都是有效候选者”。您能更详细地解释一下吗?您向重载函数传递了一个double类型的参数,它可以选择接受int的参数还是接受float的参数。问题是存在从double到int和从double到float的隐式转换,但编译器不知道您想要哪一个,因此重载是不明确的。(注:我的用户名不是Micheal)@Borgleader但5.5不是浮点吗?当我们想将其作为浮点传递时,有必要将“f”附加到5.5吗?我一直认为5.5是浮点还是双精度,两者之间的唯一区别是两种类型可以接受的值的范围。正如我之前所说,
5.5
是双精度文本,它的类型是
double
。通常它是这并不重要,因为隐式转换会将double转换为float,但在这里,由于int也有重载,编译器不知道应该进行哪种转换。
5.0
是double literal(
5.0f
用于float)。因此,这些需要转换,并且由于
int
float
都是有效的候选者,因此重载是不明确的。亲爱的Michael,我没有得到“因为int和float`都是有效候选者”。您能更详细地解释一下吗?您向重载函数传递了一个double类型的参数,它可以选择接受int的参数还是接受float的参数。问题是存在从double到int和从double到float的隐式转换,但编译器不知道您想要哪一个,因此重载是不明确的。(注:我的用户名不是Micheal)@Borgleader但5.5不是浮点吗?当我们想将其作为浮点传递时,有必要将“f”附加到5.5吗?我一直认为5.5是浮点还是双精度,两者之间的唯一区别是两种类型可以接受的值的范围。正如我之前所说,
5.5
是双精度文本,它的类型是
double
。通常它是不要紧,因为隐式转换会将double转换为float,但这里因为int也有重载,编译器不知道应该进行哪种转换。亲爱的故事讲述者,您能解释一下“它可以通过单个转换同时匹配这两种转换”吗@ HITX11C++解决了在过载处理过程中调用重载函数的问题,它通过匹配参数的类型,将函数的形式参数与类型的参数进行匹配,其中的一部分涉及隐式转换(如:代码> int <代码> > <代码>浮点< /Cord>或反之亦然)。,如果没有完全匹配。Teller,但5.5不是浮点吗?当我们想将其作为浮点传递时,是否需要将“f”附加到5.5?我一直认为5.5是浮点或双精度,两者之间的唯一区别是两种类型可以使用的值的范围take@HitX11它不是一个
float
literal,而是一个
double
。尽管它们可能是一个点,但不同的类型。但是,你不能绕过它,C++是一种强类型的语言。@ Histx11<代码> 5.5代码< >代码>双< /代码>,<代码> 5.5f >代码>浮点< /代码>,如所解释的,亲爱的故事出纳员,你能解释“它能同时与一个转换相匹配”吗?@ HITX11C++解决了在过载处理过程中调用重载函数的问题,它通过匹配参数的类型,将函数的形式参数与类型的参数进行匹配,其中的一部分涉及隐式转换(如:代码> int <代码> > <代码>浮点< /Cord>或反之亦然)。,如果没有完全匹配。Teller,但5.5不是浮点吗?当我们想将其作为浮点传递时,是否需要将“f”附加到5.5?我一直认为5.5是浮点或双精度,两者之间的唯一区别是两种类型可以使用的值的范围take@HitX11它不是一个
float
literal,而是一个
double
。尽管它们可能是一个点,但不同的类型。你不能绕过它,C++是一种强类型的语言。@ Histx11<代码> 5.5代码>代码>双< /代码>,<代码> 5.5f < /COD> >代码>浮点< /代码>,如解释,和