2009-08-05 20 views
2

私はC#を初めて使用しています。私は次のプログラムに慣れようとしていますが、最後にエラーがスローされます。私は愚かな間違いをしていることを知っています。すべてのヘルプははるかに高く評価されるだろう:C#未割り当てローカル変数エラー

静的な無効メイン(文字列[] args){

 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; 

} 

エラー 行55に未割り当てのローカル変数 'myobjarray'を使用して、コピーして貼り付けますow: myobjarray [c] =新しいall_integer_IDs();あなたは、あなたがそれをインスタンス化するとき、配列myobjarrayのサイズと種類を宣言する必要があるよう

おかげで、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

でAND(あなたの場合、AllIntegerIDsの)クラス名のPascalCaseを使用してください:あなたはそれを

の使用を割り当てる必要があります。他の開発者はそれに感謝します

- EDIT、私の悪い。それを呼び出す方法を修正しました。以下を試してください

+0

おかげさまsamuel..itは完璧に今働いています...私はこのC#GUIに取り組んでいますので、すぐにいくつかの質問をもっと早く投稿してください。あなたはそれらに答える時間を得ることを願っています。 – zack

+0

私は何でもできます。がんばろう! –

1

は、それは見えます。実際には、すでにコードを取得しているように見えます。コメント記号を削除するだけです。

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

ありがとう、よくコメントを削除しました。これで、私は、行に「メソッド名が期待される」エラーを表示します。 all_integer_IDs [] myobjarray = new all_integer_IDs [10](); また、コンストラクタでfolllowingを試してみましたが、どちらも失敗しました。 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]();でエラーが発生しました。また、私はコンストラクタでfolllowingしようとしましたが、それはどちらかの仕事をしませんでした: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]();でエラーが発生しました。また、私はコンストラクタでfolllowingしようとしましたが、それはどちらかの仕事をしませんでした:public all_integer_IDs(){m_messageID = 0; m_messagetype = 0; m_classID = 0; m_categoryID = 0; } – zack

関連する問題