boost odeinit问题:“没有可行的重载'-='

问题描述

我正在尝试创建一个增强odeint解析器。我可以从方程中得到双精度的解决方案,但我需要一个能在(3D)点上工作的解决方案(我将其用作开普勒轨道求解器的学习曲线),并且得到:

no viable overloaded '-=' 

编译器没有可行的重载错误,它指向operators.hpp中的第261行,即:

BOOST_BINARY_OPERATOR_NON_COMMUTATIVE( subtractable,- )

导致此错误的最小代码如下。请注意,Point3D是从odeind中的lorenz_point代码获取的。

#include <boost/operators.hpp>
#include <boost/numeric/odeint.hpp>

class point3D :
    boost::additive1< point3D,boost::additive2< point3D,double,boost::multiplicative2< point3D,double > > >
    {
    public:

        double x,y,z;   
        point3D() : x( 0.0 ),y( 0.0 ),z( 0.0 )
        { }  
        point3D( const double val ) : x( val ),y( val ),z( val )
        { }
        point3D( const double _x,const double _y,const double _z ) : x( _x ),y( _y ),z( _z )
        { } 
        point3D& operator+=( const point3D &p )
        {
            x += p.x; y += p.y; z += p.z;
            return *this;
        }    
        point3D& operator*=( const double a )
        {
            x *= a; y *= a; z *= a;
            return *this;
        }
};


int main()
{
    point3D x;
    point3D dxdt =  x - x;
    
    // Suppress unused variable warning.
    (void) dxdt;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)