tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル多段階配列の宣言の仕方
記事No6935
投稿日: 2008/02/06(Wed) 13:51
投稿者おたか
こんにちは。

次のような多段階配列を使いたいのですが、New宣言しろと怒られます。
でも複雑すぎて、どのように宣言したらいいかわかりません。
どなたか教えてください。

   Dim AB(72) As AllMode

   Private Structure AllMode
        Dim bu(30) As XYZV
        Dim nm As BData
   End Structure

   Public Structure XYZV
        Dim x As Integer
        Dim y As Integer
        Dim z As Integer
        Dim v As Integer
   End Structure

   Private Structure BData
        Dim name As String
        Dim xxx As Integer
        Dim yyy As Integer
   End Structure

[ツリー表示へ]
タイトルRe: 多段階配列の宣言の仕方
記事No6936
投稿日: 2008/02/06(Wed) 15:12
投稿者よねKEN
> New宣言しろと怒られます。

そういうときは、実際に発生したエラーメッセージをコピペで記載するようにしてください。おそらく以下のようなエラーが出たのではないでしょうか。
「error BC31043: 構造体メンバとして宣言された配列を初期サイズで宣言することはできません。
        Dim bu(30) As XYZV
            ~~~~~~                   」

>    Private Structure AllMode
>         Dim bu(30) As XYZV
>         Dim nm As BData
>    End Structure

構造体のメンバーには静的配列が使えませんので以下のように変更します。

    Private Structure AllMode
         Dim bu() As XYZV
         Dim nm As BData
         Public Sub Initialize()
             bu = New XYZV(30){}  ' あるいは Redim bu(30)でもOK
         End Sub
    End Structure

この構造体を使うときにはまずInitializeメソッドを呼ぶ必要がありますので、
AB(72)を使う前に以下のような感じで初期化してください。

For i As Integer = 0 To AB.Length
    AB(i).Initialize()
Next

余談ですが、
> 次のような多段階配列を使いたいのですが、

今回ご提示のソースようなものは、一般的な呼称はなくて、
多段階配列(ジャグ配列ともいいます)とは言わないと思います。

多段階配列という言い方をする場合は、

Dim a(10)(20) As Integer

というような方法で宣言された配列を言います。

[ツリー表示へ]
タイトルRe^2: 多段階配列の宣言の仕方
記事No6947
投稿日: 2008/02/07(Thu) 16:43
投稿者おたか
ご返答ありがとうございます。
早速教えていただいたように修正してみます。

> そういうときは、実際に発生したエラーメッセージをコピペで記載するようにしてください。おそらく以下のようなエラーが出たのではないでしょうか。
> 「error BC31043: 構造体メンバとして宣言された配列を初期サイズで宣言することはできません。

コンパイルエラーはごまかして取ったので、
実際わからなかったエラーメッセージは、
実行時に「オブジェクトインスタンスをNew宣言しなさい」的な
内容のメッセージだったと思います。
おぼろげな記憶で質問を書きましてすいませんでした。

> 多段階配列という言い方をする場合は、
>
> Dim a(10)(20) As Integer
>
> というような方法で宣言された配列を言います。

勉強になります。ありがとうございます。
プログラムの基本はCで学んだので、
VBの配列の仕組み、特にCでいう構造体配列をVBで使いたいときには、
今回のように混乱してしまいます。

[ツリー表示へ]