我有如下功能:
void add(int&,float&,float&);
当我打电话时:
加(1,30,30)
它无法编译。
add(1,30.0,30.0)也无法编译。
似乎在两种情况下,它都被隐式转换为double而不是float。
那么,你是否建议重新定义add as add(int&,double&,double&)?是否有任何其他传递途径使add(1,30,30)工作,而不是使用float转换30或者指定为“float x = 30; add(1,x,x)”?
我曾经认为编译器能够检测到float是一个超整数的整数,因此会成功编译它。显然,事实并非如此。
谢谢!
答案 0 :(得分:4)
您的函数通过引用而不是值来获取其参数,并且您不能通过非const引用传递常量整数/浮点值。您应该更改函数以按值获取其参数,或者传递实际变量而不是常量,例如:
int x = 1;
float y = 30, z = 30;
add(x, y, z);
您可以隐式地将int
投射到float
或double
,但不能隐含地将int&
投射到float&
。
答案 1 :(得分:2)
在你的函数声明中,你要求“pass-by-reference”:
void add(int&,float&,float&);
但您尝试使用常量调用该函数。这就是问题所在。
答案 2 :(得分:0)
int
到float
到double
的升迁有效,但问题是你没有将变量传递给add(),所以在add()里面它不能改变它们。
更改add()使其不通过引用传递(删除&
s)或传递相应类型的变量。