公共静态成员在公共静态方法中显示为 null
本文关键字:null 显示 静态方法 静态成员 | 更新日期: 2023-09-27 18:33:58
我正在编写一个位于main之外并与公共静态成员交互的方法。我在main()中初始化了成员,并继续尝试在我的方法中使用它,指针为空:
public class Program
{
…
public static EulerPID PitchAxis;
public static EulerPID RollAxis;
…
public static void FixedUpdateRoutine(object state)
{
…
if (…)
{
if (…)
{
…
///Apparently PitchAxis and RollAxis are NULL?
double[] output = new double[] { PitchAxis.UpdatePID(FloatQs[1]), RollAxis.UpdatePID(FloatQs[2]) };
…
}
}
}
public static void Main()
{
…
// initialize PID controllers
EulerPID PitchAxis = new EulerPID(0.0001, 0.001, 0.001);
EulerPID RollAxis = new EulerPID(0.0001, 0.001, 0.001);
…
}
帮助?提前感谢!
您的主要函数正在做的是创建EulerPID
的本地副本。你的主应该是什么样子的:
public static void Main()
{
…
// initialize PID controllers
PitchAxis = new EulerPID(0.0001, 0.001, 0.001);
RollAxis = new EulerPID(0.0001, 0.001, 0.001);
…
}
您正在声明两个与全局变量同名的局部变量。
结果是两个全局变量被局部变量隐藏并且永远不会初始化。
当您尝试在FixedUpdateRoutine
中使用它们时,您会得到空引用异常
要初始化全局变量,您需要删除名称前的类型。
PitchAxis = new EulerPID(0.0001, 0.001, 0.001);
RollAxis = new EulerPID(0.0001, 0.001, 0.001);