我有一个功能,而我想象征性地和数字地操纵。也就是说,采取衍生物以及在某些点评估函数。我想,也许是错误的,一般性的最好的方法是让用户定义的类有两个成员函数:一个提供派生(所有符号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;
}
我使用了相当草率的&#39;&#39;定义以避免可能与符号版本冲突,但我得到的主要错误是:&#34;字符串常量之前的预期标识符&#34;箭头指向&#34; t&#34;的符号定义,以及所有其他符号。显然,由于这些都没有被正确宣布,所以其他一切都没有了。
或许有必要指出符号定义和操作在main()中工作得很好。
谢谢!
答案 0 :(得分: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)))
{
}