-1

我在尝试实现某些方法时遇到了一些麻烦。这就是我所做的。

1) sistema 类的 1 个对象是用 Rotor 类的 1 个对象和 IModeloDinamico 类的 1 个对象创建的。这个 Rotor 和 IModeloDinamico 对所有变量都有自己的访问器。

sistema::sistema() {

new Rotor();
new IModeloDinamico(); 
};

2)然后我实现了一个方法来解决一个微分系统,它从转子和 IModeloDinamico 对象中获取所有值。

其中 GetFunctionParseri() 是 IModeloDinamico 的一个方法,它通过引用返回一个值:

const FunctionParser& GetFunctionParser1(){return fp1;};

该对象 fp1 属于 FunctionParse 类。

解决ode系统的方法是:

int sistema::odesolver(){
cout <<"***********************************************************************"<< endl ;
cout <<"************************START ODE SOLVER FUNCTION**********************"<< endl ;
cout <<"***********************************************************************"<< endl ;
const FunctionParser& sfp1=IModeloDinamico::GetFunctionParser1();
const FunctionParser& sfp2=IModeloDinamico::GetFunctionParser2();
const FunctionParser& sfp3=IModeloDinamico::GetFunctionParser3();
const FunctionParser& sfp4=IModeloDinamico::GetFunctionParser4();
const FunctionParser& sfp5=IModeloDinamico::GetFunctionParser5();
const FunctionParser& sfp6=IModeloDinamico::GetFunctionParser6();
const FunctionParser& sfp7=IModeloDinamico::GetFunctionParser7();
const FunctionParser& sfp8=IModeloDinamico::GetFunctionParser8();
const FunctionParser& sfp9=IModeloDinamico::GetFunctionParser9();
const FunctionParser& sfp10=IModeloDinamico::GetFunctionParser10();
const FunctionParser& sfp11=IModeloDinamico::GetFunctionParser11();
const FunctionParser& sfp12=IModeloDinamico::GetFunctionParser12();
const FunctionParser& sfp13=IModeloDinamico::GetFunctionParser13();
const FunctionParser& sfp14=IModeloDinamico::GetFunctionParser14();
const FunctionParser& sfp15=IModeloDinamico::GetFunctionParser15();
const FunctionParser& sfp16=IModeloDinamico::GetFunctionParser16();
//Some code

这就是我将 fpi 的值(即 IModeloDinamico 的变量)分配给 sfpi 的方式,这是我在其中使用的变量:

 double k1[] = {IModeloDinamico::Gettinitial() , IModeloDinamico::Getu1() , IModeloDinamico::Getu2(),
         IModeloDinamico::Getu3(), IModeloDinamico::Getu4(), IModeloDinamico::Getp(),
         IModeloDinamico::Getq(), IModeloDinamico::Getr(), IModeloDinamico::Getphi(),
         IModeloDinamico::Gettheta(), IModeloDinamico::Getpsi(), IModeloDinamico::Getvx(),
         IModeloDinamico::Getvy(), IModeloDinamico::Getvz(), IModeloDinamico::Getx(),
         IModeloDinamico::Gety(), IModeloDinamico::Getz() };
double k2[] = {IModeloDinamico::Gettinitial() + IModeloDinamico::GetH()/2 ,
         IModeloDinamico::Getu1() + (IModeloDinamico::GetH()/2)*sfp1.Eval(k1) ,
         IModeloDinamico::Getu2() + (IModeloDinamico::GetH()/2)*sfp2.Eval(k1) ,
         IModeloDinamico::Getu3() + (IModeloDinamico::GetH()/2)*sfp3.Eval(k1) ,
         IModeloDinamico::Getu4() + (IModeloDinamico::GetH()/2)*sfp4.Eval(k1) ,
         IModeloDinamico::Getp() + (IModeloDinamico::GetH()/2)*sfp5.Eval(k1) ,
         IModeloDinamico::Getq() + (IModeloDinamico::GetH()/2)*sfp6.Eval(k1) ,
         IModeloDinamico::Getr() + (IModeloDinamico::GetH()/2)*sfp7.Eval(k1) ,
         IModeloDinamico::Getphi() + (IModeloDinamico::GetH()/2)*sfp8.Eval(k1) ,
         IModeloDinamico::Gettheta() + (IModeloDinamico::GetH()/2)*sfp9.Eval(k1) ,
         IModeloDinamico::Getpsi() + (IModeloDinamico::GetH()/2)*sfp10.Eval(k1) ,
         IModeloDinamico::Getvx() + (IModeloDinamico::GetH()/2)*sfp11.Eval(k1) ,
         IModeloDinamico::Getvy() + (IModeloDinamico::GetH()/2)*sfp12.Eval(k1) ,
         IModeloDinamico::Getvz() + (IModeloDinamico::GetH()/2)*sfp13.Eval(k1) ,
         IModeloDinamico::Getx() + (IModeloDinamico::GetH()/2)*sfp14.Eval(k1) ,
         IModeloDinamico::Gety() + (IModeloDinamico::GetH()/2)*sfp15.Eval(k1) ,
         IModeloDinamico::Getz() + (IModeloDinamico::GetH()/2)*sfp16.Eval(k1)};

其中方法 eval 是 FunctionParser 类的公共方法。

类 sistema 声明为:

class sistema: public Rotor, public IModeloDinamico, public FunctionParser {

public:

sistema();

virtual ~sistema();

int odesolver();

};

错误消息在 sfp1.eval(k1)

此行有多个标记 - 无效参数“候选者是:double Eval(const double )” - 将 'const FunctionParser' 作为 'double FunctionParser::Eval(const double )' 的 'this' 参数传递会丢弃限定符 [-fpermissive]

eval 方法是:

double Eval(const double* Vars);

这是我的第二条信息。在第一个中,我犯了一些我试图修复的格式错误。但可能还有其他一些错误。如果我的信息难以阅读,我深表歉意。告诉我格式有什么问题,我会修复它。

非常感谢您的帮助!!!!!

4

1 回答 1

1

由于您FunctionParser是 const 引用,因此您需要Eval具有以下签名:(double Eval(const double* Vars) const或从引用中删除 const-ness)。

于 2013-05-07T12:22:58.003 回答