问题描述
我正在尝试创建一个增强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 (将#修改为@)