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

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 大池  (社会人) 投稿日時 2012/3/18 10:33:55
魔界の仮面弁士様、bz9様

どうもすみません
「厚かましいお願いの件」勘違いしていました。
うまくいきました。
今後ともよろしくお願いいたします。
投稿者 大池  (社会人) 投稿日時 2012/3/17 17:30:39
魔界の仮面弁士様、bz9様

いつもながらの迅速、ご丁寧なご指導ありがとうございます。
 Public Sub initialize()の意味もわからず本の説明をそのままテストしました。
お恥ずかしいしだいです。
厚かましいお願いですが、いまひとつお教えください。
 Dim dd As New test1
のddを配列でするにはどのようにすればいいのでしょうか?
応用のきかないもので誠にすみません。
よろしくお願いいたします。
投稿者 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 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の配列 
投稿者 (削除されました)  () 投稿日時 2012/3/17 10:51:39
(削除されました)
投稿者 大池  (社会人) 投稿日時 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'も同じ警告です