C++ &引用;无法将参数1从双精度转换为浮点型;虽然没有';不改变参数

C++ &引用;无法将参数1从双精度转换为浮点型;虽然没有';不改变参数,c++,C++,作为一名编码初学者,我正在为我的C考试做准备,并且正在做一个练习,在那里我必须编写一个程序来计算sinh x。。。当我以正常方式编写时,它工作正常并计算出正确的答案,但当我将函数从按值调用改为按引用调用时,我犯了一个错误“无法将参数1从double转换为float”。。。为什么我得到它,当我使用那个值时,我应该考虑什么? 在这里您可以看到我的代码:) 谢谢你的建议/帮助;) 15.0是一个双常数 尝试将其设置为浮点常量 15.0fC没有引用调用。当您将函数参数的类型从float更改为float*

作为一名编码初学者,我正在为我的C考试做准备,并且正在做一个练习,在那里我必须编写一个程序来计算sinh x。。。当我以正常方式编写时,它工作正常并计算出正确的答案,但当我将函数从按值调用改为按引用调用时,我犯了一个错误“无法将参数1从double转换为float”。。。为什么我得到它,当我使用那个值时,我应该考虑什么? 在这里您可以看到我的代码:)


谢谢你的建议/帮助;)

15.0是一个双常数

尝试将其设置为浮点常量


15.0f

C没有引用调用。当您将函数参数的类型从
float
更改为
float*
时,必须更改调用者以匹配。您的函数现在需要一个指针,因此必须提供一个指针。例如,此调用将起作用:

float fifteen = 15.0;
float erg=sinhyp(&fifteen);

&
操作员是关键。它生成一个指针值,指向包含值
15.0

的变量。您的函数期望的是
浮点*
,但您要传递的是
双精度
。您不能以这种方式在指针和值之间进行转换

由于函数实际上不更改传入的值,因此不需要指针。然后值
15.0
,即
双精度
,可以安全地转换为
浮点

float sinhyp (float x)
{
    return (0.5*(pow(e,x)-pow(e,(-1)*(x))));
}
float sinhyp(float*x)
不是通过引用传递。它通过值a
float*
or传递

要通过引用传递,请使用

// float sinhyp (float *x) {
float sinhyp (float &x) {
    // return (0.5*(pow(e,*x)-pow(e,(-1)*(*x))));
    return (0.5*(pow(e,x)-pow(e,(-1)*(x))));
}
使用匹配的类型调用

    // float erg=sinhyp(15.0);
    float erg=sinhyp(15.0f);

你使用C还是C++?代码>使用名称空间std
在C中是无效语句,
iostream
头在C中不可用。我在这里有一个小小的赌注,即发布的错误“无法将参数1从double转换为float”实际上是“无法将参数1从double转换为float*”(注意添加了
*
)我很肯定, STDAFX.H./Cuth>头不是C或C++中的……TyBySwitt,它是VC++中常用的标题。它不是任何标准库的一部分。嗯,有了这个想法,我得到了“错误:'sinhyp'的参数1的不兼容类型”。
15.0
not
15.0f
都无效
float*
。是的。浮动是不一样的。打开一本书,学习c语言中的要点。好的:)非常感谢。。。。这很奇怪,因为其中一个练习希望我更改它,所以我不确定:)现在是否会尝试:)当我以这种方式更改它时,出现错误:无法将参数1从“double”转换为“float&@sanastark您是否编写了
sinhyp(15.0)
sinhyp(15.0f)根据这个答案?(注意
f
)谢谢你的想法,但代码还是没有被接受
    // float erg=sinhyp(15.0);
    float erg=sinhyp(15.0f);