2013-05-07 95 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