2014-11-03 2 views
0

Я хочу установить значения в мою структуру, написанную en C#, и я получаю одну ошибку.Заполнение сложной структуры с двухуровневым массивом C#

private struct pack2 
    { 
     public float var; 
     public float [3]var2; 
    } 
    private struct pack 
    { 
     public pack2[] ster; 
    } 

private void recv() 
{ 
    pack mystruct; 
    mystruct.ster = new pack2[4]; // Because I need to declare 4 structures of pack2 
    mystruct.ster[0].var = 2F; 
    mystruct.ster[0].var[0] = 1F; // error 
} 

ОШИБКА: NullReferenceException было необработанное, Addinfo: Ссылка на объект не указывает на экземпляр объекта

как я могу это исправить?

РЕШИТЬ:

private struct pack2 
     { 
      public float var; 
      public float [3]var2; 
     } 
     private struct pack 
     { 
      public pack2[] ster; 
     } 

    private void recv() 
    { 
     pack mystruct; 
     mystruct.ster = new pack2[4]; // Because I need to declare 4 structures of pack2 
     mystruct.ster[0].var = 2F; 
     mystruct.ster[0].var2 = new float[3]; // Because I need 3 floats on each pack2 
     mystruct.ster[1].var2 = new float[3]; // Because I need 3 floats on each pack2 
     mystruct.ster[2].var2 = new float[3]; // Because I need 3 floats on each pack2 
     mystruct.ster[3].var2 = new float[3]; // Because I need 3 floats on each pack2 
     mystruct.ster[0].var2[0] = 1F; 
     mystruct.ster[0].var2[1] = 1F; 
     mystruct.ster[0].var2[2] = 1F; 
    } 

Я надеюсь, что будет полезно для людей. Благодаря alex

+4

Смещаемые структуры являются злыми. Это должны быть классы. – SLaks

+0

Я хочу повторить то, что сказал Слэкс, и предоставить это официальное руководство от Microsoft: [Выбор между классом и структурой] (http://msdn.microsoft.com/en-us/library/ms229017.aspx) –

ответ

3

Вам необходимо инициализировать массив.

// One instance 
ster = new pack2[1]; 

Вы можете найти более подробную информацию о массивах here.

Структуры редко используются в фактическом коде. В большинстве случаев вы должны использовать классы.

См. Это answer о том, когда использовать структуры (редко).

+0

Работает благодаря u , как я должен указать var 2, потому что у меня такая же ошибка, и я не могу экземпляр. thanks – Javi

+0

Число в квадратных скобках определяет размер массива во время создания. Если вы хотите сохранить два экземпляра пакета2, вам нужно изменить его на 'pack2 [2]' и т. Д. –

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