2009-08-05 3 views
2

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

статической силы основной (String [] арг) {

 IntPtr hCannedMessages = CannedMessagesInit(); 

     using (StreamReader sr = new StreamReader(CANNED_MESSAGE_FILE)) 
     { 
      String line, sub; 
      all_integer_IDs[] myobjarray;// = new all_integer_IDs[10]; 
      for (int c = 0; c < 10; c++) 
      { 
       myobjarray[c] = new all_integer_IDs(); 

      } 
       line = sr.ReadLine(); 
       Console.WriteLine(line); 

       if (line.Length > 15) 
       { 
        sub = line.Remove(line.IndexOf(' ', 2)); 
        Console.WriteLine("{0} \n",sub); 

    myobjarray[0].setvalues((int)sub[2], (int)sub[3], (int)sub[4], (int)sub[5]); 

Console.WriteLine ("{0}, {1}, {2}, {3}" , myobjarray [0] .m_messageID, myobjarray [0] .m_messagetype, myobjarray [0] .m_classID, myobjarray [0] .m_categoryID); }

   Console.Read(); 
      sr.Close(); 
     } 

    } 
} 

}

А класс находится в файле Class1.cs в том же проекте и выглядит следующим образом:

общественного класса all_integer_IDs {

public all_integer_IDs() 
    { 

     setvalues(0, 0, 0, 0); 

    } 

    ~all_integer_IDs() 
    { 
    } 

    public void setvalues (int messageID, int messagetype, int classID, int categoryID) 
    { 
     this.m_messageID = messageID; 
     this.m_messagetype = messagetype; 
     this.m_classID = classID; 
     this.m_categoryID = categoryID; 
    } 

    public int m_messageID; 
    public int m_messagetype; 
    public int m_classID; 
    public int m_categoryID; 

} 

Ошибка выглядит следующим образом: Использование неназначенной локальной переменной myobjarray в строке 55, которая копируется и вставляется bel ow: myobjarray [c] = new all_integer_IDs();

Спасибо, Viren

+0

Я изменил свой ответ. Надеюсь, это поможет –

ответ

2

Вы не выделили места для myObjarray. Вам нужно выделить его

Использование:

all_integer_IDs[] myobjarray = new all_integer_IDs[10]; 
for (int c = 0; c < 10; c++) 
{ 
    myobjarray[c] = new all_integer_IDs(); 
} 

в строке 55.

И, пожалуйста, используйте PascalCase для имен классов (в вашем случае, AllIntegerIDs). Другие разработчики поблагодарят вас за это

--EDIT, мой плохой. Исправлена ​​возможность его вызова. Пожалуйста, попробуйте следующее:

+0

спасибо samuel..и работает отлично сейчас..пост еще несколько вопросов довольно скоро, так как я работаю над этим графическим интерфейсом C# в настоящее время .. надеюсь, у вас есть время, чтобы ответить на них. – zack

+0

Я постараюсь помочь вам во всем, что я могу , Удачи! –

1

Похоже, что вам нужно объявить размер и тип myobjarray массива при его экземпляр. На самом деле, похоже, что у вас уже есть этот код, вам просто нужно удалить символ комментария.

all_integer_IDs[] myobjarray = new all_integer_IDs[10](); 
+0

Спасибо, ну, я удалил комментарий.Теперь он дает мне ошибку «Имя метода ожидается» в строке all_integer_IDs [] myobjarray = new all_integer_IDs [10](); Также я попытался использовать конструктор, но он тоже не работал: public all_integer_IDs() {m_messageID = 0; m_messagetype = 0; m_classID = 0; m_categoryID = 0; } – zack

+0

Вы уверены, что пространства имен в обоих классах одинаковы? – sgmoore

+0

На самом деле это должно быть all_integer_IDs [] myobjarray = new all_integer_IDs [10]; – sgmoore

0

Вы никогда не создавали экземпляр своего массива, кажется, что вы прокомментировали эту часть.

Если вы хотите массив переменной длины, попробуйте вместо этого использовать список <>.

+0

Спасибо, ну, я удалил комментарий. Теперь он дает мне ошибку «Имя метода ожидается» в строке all_integer_IDs [] myobjarray = new all_integer_IDs [10](); Также я пробовал использовать конструктор, но он тоже не работал: public all_integer_IDs() {m_messageID = 0; m_messagetype = 0; m_classID = 0; m_categoryID = 0; } – zack

0

Вы никогда не инициализируете myobjarray. Вы объявляете myobjarray, но вы не присваиваете ему никакой памяти; как в: вы не инициализируете переменную. Однако вы инициализируете элементы массива (с еще одним массивом), но вы не сохраняли память для самого myobjarray.
(Инициализация прокомментирована)

+0

Спасибо, ну, я удалил комментарий. Теперь он дает мне ошибку «Имя метода ожидается» в строке all_integer_IDs [] myobjarray = new all_integer_IDs [10](); Также я пробовал использовать конструктор, но он тоже не работал: public all_integer_IDs() {m_messageID = 0; m_messagetype = 0; m_classID = 0; m_categoryID = 0; } – zack

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