[英]Using Symbolic C++ in user-defined classes
我想同時進行符號和數值操作時有一個函數。 即,在某些點上取導數並評估函數。 我認為,也許做錯了,最好的方法通常是讓用戶定義的類具有兩個成員函數:一個提供派生函數(所有符號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()中可以很好地進行操作。
謝謝!
您需要在構造函數中初始化類成員。 您無法像嘗試那樣直接對其進行初始化。 沒有這樣做的語法。 因此,您嘗試這樣做是語法錯誤。
嘗試使用以下成員聲明:
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)))
{
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.