c++ - 函数引用和指针
问题描述
我正在尝试使用编码良好的库为正态分布制作累积密度函数(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作为第一个参数。
解决方案
我不太明白为什么我不能在这里传递 &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
和初始化为零。ccum
cumnor
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;
}
推荐阅读
- html - 选择下拉菜单在 Microsoft Edge 浏览器中不起作用
- javascript - Angular2如何切换网络摄像头
- javascript - 如何将嵌套的 JSON 数据结构简化为地图 JavaScript
- javascript - 在 Tree map d3.js 中解析 json 以获得不同的颜色
- docker - 如何限制 docker 容器内存使用
- jmeter - 如何在 Jmeter 中上传 .zip 文件?
- database - 如何在角度的单独组件之间存储和交换大型 Firestore 数据?
- reactjs - 带有 redux 连接的 Typescript 约束
- java - 具有不同对象类型的重复代码
- python - 使用 python + Selenium + Beautiful Soup 查找具有固定字符串的 URL