gpt4 book ai didi

c++ - 在 ODEINT + THRUST 观察器中,接收到表达式必须是可修改左值的错误

转载 作者:行者123 更新时间:2023-11-28 00:25:16 24 4
gpt4 key购买 nike

我一直致力于扩展/修改 thrust + odeint 示例 [ code , documentation ] 系统地改变参数,并观察效果。

我遇到了一个奇怪的错误,当我尝试修改某些应该可以修改的变量(并且在示例中被修改)时,我收到以下错误。

main.cu: error: expression must be a modifiable lvalue

下面是我尝试运行的观察者结构的源代码,注释显示了导致错误的行。

我将此错误理解为赋值运算符左侧的表达式 = 不是可修改的值。但在我看来,它与上面示例源代码中的同名变量完全一样(运行正常)。

//// Observes the system to detect if it ever dies during the trial
struct death_observer {

// CONSTRUCTOR
death_observer( size_t N, size_t historyBufferLen = 1)
: m_N( N ), m_count( 0 ) { }

template< class State , class Deriv >
void operator()(State &x , Deriv &dxdt , value_type t ) const
{
++m_count; // <-- This line causes the error.
}

// variables
size_t m_N;
size_t m_count;
};

...这是运行集成器和这个观察器的 main() 中的代码,以防有帮助。

  parallel_initial_condition_problem init_con_solver( N_ICS );
death_observer obs( N_ICS );

//////////////////////////////// // // integrate
typedef runge_kutta_dopri5< state_type , value_type , state_type , value_type, thrust_algebra, thrust_operations > stepper_type;
const value_type abs_err = 1.0e-6;
const value_type rel_err = 1.0e-6;

double t = t_0;
while( t < t_final ) {
integrate_adaptive( make_controlled( abs_err, rel_err, stepper_type() ) ,
init_con_solver ,
std::make_pair( x.begin() , x.begin() + N_VARS*N_ICS ),
t , t + 1.0 , init_dt );
t += 1.0;
obs( x, *(&x+N_VARS*N_ICS), t); // not sure about middle arg here, but I don't think it is the cause of the error.
}

我已尝试将我的代码缩减为最简单的情况。注释掉上面倒数第三行会使程序正常运行。

我究竟做错了什么?我的 m_count 和上面链接的示例代码中的 m_count 有什么不同?非常感谢!

最佳答案

将评论转化为答案:

template< class State , class Deriv >
void operator()(State &x , Deriv &dxdt , value_type t ) const
{
++m_count; // <-- This line causes the error.
}

您将 operator() 声明为 const 成员函数,因此它不能修改类数据成员,除非该成员被声明为 mutable .

旁注:*(&x+N_VARS*N_ICS) 几乎肯定是不正确的,因为 x 看起来像 .begin()< 中的容器 调用。

关于c++ - 在 ODEINT + THRUST 观察器中,接收到表达式必须是可修改左值的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25411029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com