我正在编写一个存在于main之外并与公共静态成员交互的方法。我初始化main()中的成员并继续尝试在我的方法中使用它,指针为null:
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);
…
}
帮助?提前谢谢!
答案 0 :(得分:1)
您的主要功能是创建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);
…
}
答案 1 :(得分:1)
您正在声明两个与全局变量具有相同名称的局部变量
结果是两个全局变量被本地人隐藏并且从未被初始化
当你尝试在FixedUpdateRoutine
中使用它们时,你会得到Null引用异常
要初始化全局变量,您需要删除名称前的类型。
PitchAxis = new EulerPID(0.0001, 0.001, 0.001);
RollAxis = new EulerPID(0.0001, 0.001, 0.001);