2014-09-05 22 views
0

我有一個函數,但我想操作符號以及數字。也就是說,在某些點上可以採用衍生工具和評估函數。我認爲,也許不正確的做法是,最好的方法是使用兩個成員函數來定義一個用戶定義的類:一個提供衍生物(所有符號C++的東西都是私有的),另一個提供替代和當提供參數和變量值時,吐出函數值。在用戶定義的類中使用符號C++

不過,我有一些麻煩,構建私有類成員位中的象徵位:

class fitFunction { 
    Symbolic t("t"), A("A"), B("B"); 
    float p1, p2, time; 
    Symbolic fn= A*(1-exp(-B*t)); 
public: 
    fitFunction(vector<float> &, float); 
    float evaluate() { 
     return fn[A == p1, B == p2, t == time]; 
    } 

}; 

fitFunction::fitFunction (vector<float> & pars, float tt) { 
p1 = pars[0]; 
p2 = pars[1]; 
time = tt; 
} 

我用了相當馬虎「TT」的定義,以避免與象徵性的版本可能發生的衝突,但主要我得到的錯誤是:「字符串常量之前的預期標識符」,指向符號定義「t」的箭頭以及所有其他字符串。很明顯,因爲這些都沒有被正確地宣佈,所有其他的事情都會出現。

也許值得指出符號定義和操作在main()中正常工作。

謝謝!

回答

0

您需要在構造函數中初始化類成員。你不能像你試圖做的那樣直接初始化它們。沒有這樣做的語法;您嘗試這樣做是因爲語法錯誤。

嘗試使用這些成員聲明:

Symbolic t, A, B; 
float p1, p2, time; 
Symbolic fn; 

然後,這些使用在構造函數初始化列表中初始化:

fitFunction::fitFunction(vector<float> & pars, float tt) 
    : t("t"), 
     A("A"), 
     B("B"), 
     p1(pars[0]), 
     p2(pars[1]), 
     time(tt), 
     fn(A * (1 - exp(-B * t))) 
{ 
}