構造体へのデータ入力についてお教えください

タグの編集
投稿者 大池  (社会人) 投稿日時 2012/3/17 10:06:09
いつもお世話になるばかりで申し訳ありません。
XPでVB2008を勉強しています。
次のような構造体を作ってテストしていますが、
  Private Structure test1
        Dim aa As String
        Dim bb() As Single
        Dim cc() As Single
        Public Sub initialize()
            ReDim bb(10)
            ReDim cc(10)
        End Sub
    End Structure
配列へのデータ設定のところで次のような警告と実行時エラーがでます。
これはどのように対処すればいいのでしょうかご指導のほどよろしくお願いいたします。
        
        Dim dd As test1
        dd.aa = "aa"
        dd.bb(1) = 1.23  <== ◎オブジェクト参照がオブジェクト インスタンスに設定されていません。
        dd.cc(1) = 4.56
        Debug.Print(dd.aa + ":" + dd.bb(1).ToString + ":" + dd.cc(1).ToString)

◎警告1変数 'bb' は、値が割り当てられる前に使用されています。Null 参照の例外が実行時に発生する可能性があります。  
'cc'も同じ警告です
投稿者 (削除されました)  () 投稿日時 2012/3/17 10:51:39
(削除されました)
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2012/3/17 11:00:21
> Dim bb() As Single
Initialize メソッドで ReDim されるようにはなっているのですが、
その Initialize メソッドを呼び出している箇所がありませんよね。

そのため、この配列の要素数はまだ確定されていない状態です。
(要素数が 0 なのではなく、bb そのものが Nothing な状態)

> これはどのように対処すればいいのでしょうか
dd.initialize()
を先に実行しておけば OK です。

もしくは、呼び出し側で初期化することもできます。3 つほど例を挙げておきます。
ReDim dd.bb(10)   '(0)~(10)までの11個の要素をもった配列として初期化 
dd.bb = New Single(11) {}   '(0)~(10)までの11個の要素をもった配列として初期化 
dd.bb = New Single() {0.0, 4.56, 1.23}   '(0)=0.0、(1)=4.56、(2)=1.23 な要素数3の配列 
投稿者 bz9  (中学生) 投稿日時 2012/3/17 11:00:28
        Dim dd As test1
        dd.aa = "aa"
        dd.bb(1) = 1.23 
        dd.cc(1) = 4.56
        Debug.Print(dd.aa + ":" + dd.bb(1).ToString + ":" + dd.cc(1).ToString)

このコードを、
        Dim dd As New test1() 'Newをつける 
        dd.aa = "aa"
        dd.initialize() 'このメソッドを呼び出して、配列を初期化する 
        dd.bb(1) = 1.23  
        dd.cc(1) = 4.56
        Debug.Print(dd.aa + ":" + dd.bb(1).ToString + ":" + dd.cc(1).ToString)

に直したら動くはずです。

配列が初期化されていないのだと思います。
投稿者 大池  (社会人) 投稿日時 2012/3/17 17:30:39
魔界の仮面弁士様、bz9様

いつもながらの迅速、ご丁寧なご指導ありがとうございます。
 Public Sub initialize()の意味もわからず本の説明をそのままテストしました。
お恥ずかしいしだいです。
厚かましいお願いですが、いまひとつお教えください。
 Dim dd As New test1
のddを配列でするにはどのようにすればいいのでしょうか?
応用のきかないもので誠にすみません。
よろしくお願いいたします。
投稿者 大池  (社会人) 投稿日時 2012/3/18 10:33:55
魔界の仮面弁士様、bz9様

どうもすみません
「厚かましいお願いの件」勘違いしていました。
うまくいきました。
今後ともよろしくお願いいたします。