我正在做控制理论方面的最后一年项目。
因此需要很多传递函数(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平台上实现代码的信息。
答案 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);
}
此处Block1
,Block2
和Block3
是构造函数中的局部变量。一旦构造函数结束,它们就会被再次销毁。
如果要坚持,则必须是成员变量,例如b1
和b2
。