0

Я пишу метод, который живет за пределами основного и взаимодействует с публичным статическим членом. Я инициализируюсь элементом внутри основных() и продолжить, чтобы попытаться использовать его в моем методе и указатель является недействительным:Публичный статический член кажется нулевым внутри общедоступного статического метода

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); 
     … 
} 

помощи? Заранее спасибо!

ответ

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

Вы объявляете две локальные переменные с тем же именем глобальных.
В результате два глобальных символа скрыты местными жителями и никогда не инициализируются.
И когда вы пытаетесь использовать их в FixedUpdateRoutine вы получите нулевой ссылки Exception

Для инициализации глобальных переменных, нужно, чтобы удалить тип перед именем.

PitchAxis = new EulerPID(0.0001, 0.001, 0.001); 
RollAxis = new EulerPID(0.0001, 0.001, 0.001); 

 Смежные вопросы

  • Нет связанных вопросов^_^