首页 > 解决方案 > 函数引用和指针

问题描述

我正在尝试使用编码良好的库为正态分布制作累积密度函数(CDF)。该库的实施与我的问题无关。所以我只在这里添加了接口。

void cumnor ( double *arg, double *result, double *ccum );

现在,我的成员函数接口:

double N(const double& x) const;

实施:

double EuropeanOption::N(const double& x) const
{ // cumulative density functions (CDF)
    
    double cum, ccum;
    cumnor(&x, &cum, &ccum);

    return cum; 
}

所以我的函数基本上取CDF中积分(x)的上限并返回值P。

但编译器向我抛出以下内容:

EuropeanOption.cpp: In member function ‘double EuropeanOption::N(const double&) const’:
EuropeanOption.cpp:82:9: error: invalid conversion from ‘const double*’ to ‘double*’ [-fpermissive]
  cumnor(&x, &cum, &ccum);
         ^~
In file included from EuropeanOption.hpp:3:0,
                 from EuropeanOption.cpp:3:
cdflib.hpp:60:6: note:   initializing argument 1 of ‘void cumnor(double*, double*, double*)’
 void cumnor ( double *arg, double *result, double *ccum );
      ^~~~~~

我的问题是我应该如何编写这个函数?我只想称它为N(d1)。我不太明白为什么我不能在这里传递&x作为第一个参数。

标签: c++pointersreference

解决方案


我不太明白为什么我不能在这里传递 &x 作为第一个参数。

传递&x给期望double*作为参数类型的函数是不正确的。如果允许,它将让被调用函数更改 的值x,即 a const

要解决此问题,请创建一个函数局部变量并使用它。

double EuropeanOption::N(const double& x) const
{ // cumulative density functions (CDF)
    
    double temp_x = x;
    double cum, ccum;
    cumnor(&temp_x, &cum, &ccum);

    return cum; 
}

作为一项额外的改进,在调用 . 之前将cum和初始化为零。ccumcumnor

double EuropeanOption::N(const double& x) const
{ // cumulative density functions (CDF)
    
    double temp_x = x;
    double cum = 0, ccum = 0;
    cumnor(&temp_x, &cum, &ccum);

    return cum; 
}


推荐阅读