公共静态成员在公共静态方法中显示为null

时间:2014-12-11 21:28:34

标签: c# nullreferenceexception static-members access-specifier

我正在编写一个存在于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);
      …
}

帮助?提前谢谢!

2 个答案:

答案 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);