2013-05-07 91 views
-1

我遇到了一些麻烦,试图实施一些方法。 这就是我所做的。类SISTEMA的评估继承方法的错误

1)1对象与1个对象类转子和类IModeloDinamico 1个对象物的内部产生。这个Rotor和IModeloDinamico拥有自己的所有变量的接口。

sistema::sistema() { 

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

2)然后我实现解决差分ecuations的系统中,需要从转子和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)}; 

Where方法EVAL是FunctionParser类的公共方法。

类SISTEMA被声明为:

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

public: 

sistema(); 

virtual ~sistema(); 

int odesolver(); 

}; 

错误消息是在sfp1.eval(K1)在该线

多个标记 - 无效参数“候选人有:双的eval(const的双)' - 传递 'const的FunctionParser' 作为 '这种双重FunctionParser' 的参数 '::的eval(const的双)' 丢弃 限定符[-fpermissive]

和eval方法是:

double Eval(const double* Vars); 

这是我的第二个消息。在第一个我做了一些格式错误,我尝试修复。但可能还有其他一些错误。 如果我的信息难以阅读,我很抱歉。 告诉我什么是错误的格式,我会解决它。

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

+0

我建议您将编程语言添加为标记。 – 2013-05-07 12:26:50

+0

对不起!我忘了! – user2357667 2013-05-08 07:57:50

回答

1

由于您的FunctionParser是一个const引用,你需要Eval具备以下特征:double Eval(const double* Vars) const(或从参考下降的常量性)。

+0

对不起,但我不能做双Eval(const double * Vars)const,因为Eval方法改变了对象的一些变量。我怎样才能从引用中删除常量?非常感谢!!!我尝试了它,它会工作如果Eval方法不改变对象的变量。 – user2357667 2013-05-08 08:48:14

+0

好吧我修好了!!!!!我从参考文献中降低了常量。谢谢您的帮助!!! – user2357667 2013-05-08 09:09:37