"无法将参数1从double转换为float"虽然没有改变参数

时间:2018-02-14 16:14:56

标签: c++

作为编码的初学者,我正在为我的C考试做准备并正在做一个练习,我必须编写一个应该计算sinh x的程序......当我以正常的方式写作时,它正常工作并计算出正确的答案,但是当我将我的功能从Call by value更改为Call by reference时,我得到了一个错误"无法将参数1从double转换为float" ...为什么我得到了它,我什么时候才能考虑用那个值? 在这里你可以看到我的代码:)

    #include "stdafx.h"
#include "math.h"
#include "iostream"
float e=2.71828;
using namespace std;


float sinhyp (float *x)
{

    return (0.5*(pow(e,*x)-pow(e,(-1)*(*x))));


}



int _tmain(void)
{

        float erg=sinhyp(15.0);
        printf("%f \n", erg);


    system ("Pause");
    return 0;
}

感谢您的建议/帮助;)

4 个答案:

答案 0 :(得分:6)

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

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

&运算符是关键。它生成一个指针值,指向包含值15.0的变量。

答案 1 :(得分:1)

15.0是双常数。

尝试将其设为浮点常量

<强> 15.0f

答案 2 :(得分:1)

您的功能期待float *,但您传递double。你不能用这种方式在指针和值之间进行转换。

由于您的功能实际上并未改变传入的值,因此您不需要指针。然后,15.0的值double可以安全地转换为float

float sinhyp (float x)
{
    return (0.5*(pow(e,x)-pow(e,(-1)*(x))));
}

答案 3 :(得分:1)

float sinhyp (float *x)不是引用的传递。它通过传递float *pointer to float

要通过引用传递,请使用&

// 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);