C / C ++类未在范围中声明:来自主类构造函数的辅助类实例化

时间:2016-03-01 12:31:18

标签: c++ arduino

我正在做控制理论方面的最后一年项目。

因此需要很多传递函数(TF),所以我为它写了一个类,它工作正常;独自一人。

class TF
{
  private:
    //variables
  public:
    TF (double * Numerator, double * Denominator)
    {
      // initialising stuffs     
    }
    float compute(double input)
    {
      // core stuff going on here
      return answer;
    }
};

但我需要设计使用大量TF的控制器,所以决定清理我的代码并使用另一个类。

class Ctrl
{
  public:
  friend class TF;
  int b1, b2;
    Ctrl (int a1, int a2, int a3, int a4, int a5)
    {
      /* 
        b1 = a4; b2 = a5;
        Num1 = F1(a1); Den1 = F2(a1);
        .
        some kind of functions to generate numerators and denominators (arrays)
        .
        Num3 = F1(a3); Den1 = F2(a3);
      */
      TF Block1(Num1, Den1);
      TF Block2(Num2, Den2);
      TF Block3(Num3, Den3);
    }
    float compute(double input1, float input2)
    {
      float ans1 = Block1.compute(input1) + b1;
      float ans2 = b2 * Block2.compute(input2);
      float ans3 = Block3.compute(ans1 + ans2);
      return ans3;
    }
};

所以现在主程序中的某个地方用我的控制器初始化:

Ctrl myController(1,2,3,4,5);

我收到以下错误:

In member function 'float Ctrl::compute()': 'Block1/2/3' was not declared in this scope
你可以告诉我什么是错的以及如何解决这个问题。 提前致谢。 对于在Arduino平台上实现代码的信息。

1 个答案:

答案 0 :(得分:3)

看看这段代码:

Ctrl (int a1, int a2, int a3, int a4, int a5)
{
  /* 
    b1 = a4; b2 = a5;
    Num1 = F1(a1); Den1 = F2(a1);
    .
    some kind of functions to generate numerators and denominators (arrays)
    .
    Num3 = F1(a3); Den1 = F2(a3);
  */
  TF Block1(Num1, Den1);
  TF Block2(Num2, Den2);
  TF Block3(Num3, Den3);
}

此处Block1Block2Block3是构造函数中的局部变量。一旦构造函数结束,它们就会被再次销毁。

如果要坚持,则必须是成员变量,例如b1b2