以下代码:
#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:错误:无法在初始化双中将"codi::RealForward{aka codi::ActiveReal>}"转换为"double">
a = Gcodi[p];
提示?
根据这里的官方文档,RealForward
是一个重载了赋值运算符的类型,因此可以使用double。。
喜欢做
codi::RealForward a = 3.0;
相反的方向当然没有定义,
这就是为什么你不能通过执行直接将codi::RealForward转换为double的原因
double a = Gcodi[p];
但你可以调用上面的函数,即
double a = Gcodi[p].getGradient();
更新:
然后你可以像做一样用一个double来分配一个RealForward对象
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
我找到了一个函数:getValue((
double a=Gcodi[p].getValue((;
如中所述:https://www.scicomp.uni-kl.de/codi/d5/dbb/Tutorial1.html