在用户定义的类中使用Symbolic C ++

时间:2014-09-05 16:27:17

标签: 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;
}

我使用了相当草率的&#39;&#39;定义以避免可能与符号版本冲突,但我得到的主要错误是:&#34;字符串常量之前的预期标识符&#34;箭头指向&#34; t&#34;的符号定义,以及所有其他符号。显然,由于这些都没有被正确宣布,所以其他一切都没有了。

或许有必要指出符号定义和操作在main()中工作得很好。

谢谢!

1 个答案:

答案 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)))
{
}