3

以下代码:

#include <codi.hpp>
...
codi::RealForward Gcodi[l];
for (int p = 0; p < l; p++) 
{
     ...
     double a = Gcodi[p];
}

给我编译错误:

nnBFAD.cpp:在函数 'void OptBF()' 中:

nnBFAD.cpp:156:25: 错误: 在初始化 double 中无法将 'codi::RealForward {aka codi::ActiveReal >}' 转换为 'double'

a = Gcodi[p];

提示?

4

2 回答 2

1

根据官方文档hereRealForward 是一个重载了赋值运算符的类型,所以你可以用一个double..

喜欢做

codi::RealForward a = 3.0;

相反的方向当然没有定义,

这就是为什么你不能直接将codi::RealForward转换为 double 的原因:

double a = Gcodi[p];

但你可以调用函数,即

double a = Gcodi[p].getGradient();

更新

然后你可以分配一个 RealForward 对象与一个 double like do

double myDouble{3.3};
RealForward a = myDouble;

但直接从 REalForwad 分配双精度是不合法的:

RealForward a = ...;
double myDouble = a; //not valid!

其他例子

RealForward b = a * a; //this is ok because a * a is a double
于 2018-12-05T08:07:49.373 回答
0

我找到了一个函数:getValue()

双 a = Gcodi[p].getValue();

如中所述:https ://www.scicomp.uni-kl.de/codi/d5/dbb/Tutorial1.html

于 2019-11-19T09:58:56.143 回答