みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

構造体 要素2次元配列の初期化方法

Module
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 side(100)() As Double
End Sub
End Structure
Public e_enq As Elem() = New Elem(100) {}
End Module

 '****** 以下ボタンなどで本文内で動作させている ***********
Dim i, j, k As Integer
1 ReDim e_enq(100).side(50)(2)
2 For k = 0 To 10
With e_enq(k)
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
1 の方法での記述で newが必要とのエラーコメント
2 の方法でも '***部でやはり newが必要とのエラーコメントが出る
 sideが1次元ならば、動作するのですが、2次元にするとエラーが発生します。
 現在、プログラムが進展しなくて困っています。
 どなたか、お詳しい方がいらしゃれば、どうかご指導をお願いいたします。

投稿日時 - 2015-10-14 11:41:23

QNo.9063785

困ってます

質問者が選んだベストアンサー

ANo.2です。

こちらでは動いていますよ。
正しいコードかどうかはわかりませんが^^;

新しいプロジェクトに、コードをコピペしてやってみてくださいな。

投稿日時 - 2015-10-15 13:02:48

お礼

動作しました。
 ループの中のinitializeがループの外にあったので.......
そのまま入れてみたら、動作しました。
 記述がシンプルで、最高です。
ちなみに、モジュールでは,newを使用せず、ループの中に2行で入れたら動作するようになりました。しかし、ご指導していただいた、記述方法がnewをいくつも記述しないので、最適だと思います。今後この方法を取り入れます。
 こころから、有難うございます。
このような文章を、ほかにも記述指定待ったようです
 なにかあれば、またよろしくお願いいたします。次からつぎへと出てきます。

投稿日時 - 2015-10-15 16:14:14

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ありゃ、そうですか。では、これではいかがでしょうか?

----------

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

----------

投稿日時 - 2015-10-15 11:28:07

お礼

再度、回答有難うございます。
 テストしてみましたが、やはり最後の.side(j)(0) =0.0の箇所で同じエラーが発生します。newを使用とのメッセージがでます。
 そちらでは、発生しないのでしょうか? 
また、よろしくご指導のほどお願いいたします。

投稿日時 - 2015-10-15 12:44:03

配列は難しいですね。私もあまり使わないので勉強になります。
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

投稿日時 - 2015-10-14 14:00:00

お礼

早速の、回答有難うございます。
 残念ながら、この方式を使うには、現在検討中のソフトでは、修正箇所があまりにも多くて、採用できません。他の関数とのやり取りもありますので。
 あくまで、ジャグ配列で検討したいと思っています。
また、なにかお気づきになりましたらご指導をお願いいたします。
 NETでも調査していますが、いまいちです。
今後もよろしくおねがいいたします。

投稿日時 - 2015-10-15 10:10:04

あなたにオススメの質問