- ベストアンサー
構造体 要素2次元配列の初期化方法
- 構造体の要素2次元配列の初期化方法として、ReDimステートメントを使用する方法がありますが、この方法ではnewが必要というエラーが発生します。
- もう一つの方法として、Forループを使用して各要素を初期化する方法がありますが、2次元配列においてもnewが必要というエラーが発生します。
- 現在、プログラムが進展しなくて困っており、どなたか詳しい方に指導をお願いしています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ANo.2です。 こちらでは動いていますよ。 正しいコードかどうかはわかりませんが^^; 新しいプロジェクトに、コードをコピペしてやってみてくださいな。
その他の回答 (2)
- BarcodeMaster
- ベストアンサー率73% (17/23)
ありゃ、そうですか。では、これではいかがでしょうか? ---------- Public Structure Elem Public nr As Integer Public type As Integer Public side()() As Double ' side(Nr.)(x|y|z)== normal vector Public Sub initialize() Dim intCnt As Integer ReDim side(10) For intCnt = 0 To 10 side(intCnt) = New Double(2) {} Next End Sub End Structure Public e_enq As Elem() = New Elem(10) {} ---------- Dim j, k As Integer For k = 0 To 10 With e_enq(k) .initialize() For j = 0 To 10 .side(j)(0) = 0.0 '*** .side(j)(1) = 0.0 .side(j)(2) = 0.0 Next j End With Next k ----------
お礼
再度、回答有難うございます。 テストしてみましたが、やはり最後の.side(j)(0) =0.0の箇所で同じエラーが発生します。newを使用とのメッセージがでます。 そちらでは、発生しないのでしょうか? また、よろしくご指導のほどお願いいたします。
- BarcodeMaster
- ベストアンサー率73% (17/23)
配列は難しいですね。私もあまり使わないので勉強になります。 2次元配列ということですので、下のようにしてみたら、とりあえず動きました^^; ---------- Public Structure Elem Public nr As Integer Public type As Integer Public side(,) As Double ' side(Nr.)(x|y|z)== normal vector Public Sub initialize() ReDim side(10, 2) End Sub End Structure Public e_enq As Elem() = New Elem(10) {} ---------- Dim j, k As Integer For k = 0 To 10 With e_enq(k) .initialize() For j = 0 To 10 .side(j, 0) = 0.0 '*** .side(j, 1) = 0.0 .side(j, 2) = 0.0 Next j End With Next k
お礼
早速の、回答有難うございます。 残念ながら、この方式を使うには、現在検討中のソフトでは、修正箇所があまりにも多くて、採用できません。他の関数とのやり取りもありますので。 あくまで、ジャグ配列で検討したいと思っています。 また、なにかお気づきになりましたらご指導をお願いいたします。 NETでも調査していますが、いまいちです。 今後もよろしくおねがいいたします。
お礼
動作しました。 ループの中のinitializeがループの外にあったので....... そのまま入れてみたら、動作しました。 記述がシンプルで、最高です。 ちなみに、モジュールでは,newを使用せず、ループの中に2行で入れたら動作するようになりました。しかし、ご指導していただいた、記述方法がnewをいくつも記述しないので、最適だと思います。今後この方法を取り入れます。 こころから、有難うございます。 このような文章を、ほかにも記述指定待ったようです なにかあれば、またよろしくお願いいたします。次からつぎへと出てきます。