電子書籍の厳選無料作品が豊富!

開発環境はMicrofoft visual stdio 2005 で開発言語はC#を使い、Windousアプリケーションでプログラミングしているのですが
オブジェクトを配列でせんげんし、オブジェクトのメンバを使うとエラーが出てしまいます。ソースコードで説明すると
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
  public partial class Form1 : Form
  {
    public class car
    {
      int a;

      public void set(int i)
      {
        a = i;
      }
    }

    public Form1()
    {
      InitializeComponent();
    }

    private void label1_Click(object sender, EventArgs e)
    {
      car[] bike = new car[1];
      bike[0].set(1);//ここでひっかかる
    }
  }
}

これをじっこうするとデバックは通るのですが、label1_Clickイベントが発生すると、「NULLの場所を参照しています」という意味のエラーが出てしまいます。
C#はほとんど初心者なので、初歩的なミスだとおもうんですが、
よろしければ御回答をお願いします。

A 回答 (1件)

こんにちわ。



確かにそのコードでは、エラーになります。

配列というのは、単にデータの集合を現しているに過ぎません。
つまり、

car[] bike = new car[1];

という記述は、carオブジェクトが1つ入る「箱(bike)」を用意しているに過ぎず、
上記の段階で、箱の中にcarオブジェクトが入るわけでありません。

箱の中にcarオブジェクトが入っていないにも関わらず、
以下のような記述をしてしまうと、

bike[0].set(1);

「bike[0]には何も入っていない=Null」と判定されエラーになってしまうのです。

質問者様がお望みの動きをさせたい場合、carオブジェクトをインスタンス化する必要があります。
つまり、

car[] bike = new car[1];
car myCar = new car();
myCar.set(1);
bike[0] = myCar;

または、

car[] bike = new car[1];
bike[0] = = new car();
bike[0].set(1);

となります。
    • good
    • 0
この回答へのお礼

なるほど・・・配列を宣言した時点では、オブジェクトがはいっていなかったのですね><。
わかりやすくて、親切なお返事ありがとうございます。たすかりました^^。

お礼日時:2008/06/09 15:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!