ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
真紅
記事: 12 登録日時: 2005年7月20日(水) 17:59
連絡する:
#1
投稿記事
by 真紅 » 2005年8月07日(日) 15:28
クラスオブジェクトのポインタの配列を扱いたいのですが、配列数が不定なので動的にメモリを確保したいのです。
静的であれば、
コード: 全て選択
Dim test[100] As *TEST
とすればうまくいくのですが…。
↓のような事をしようとしています。
コード: 全て選択
Class TEST
Public
b As Long
End Class
Dim a As **TEST
Dim i As Long
a = malloc(4 * 4)
For i = 0 To 3
a = New test()
a->b = 1
Delete a
Next
free(a)
要はポインタのポインタ型を使えないかということです。
ポインタ配列をDWord型配列にとっておき、必要なときに*TEST型変数にポインタを入れれば出来ることは出来るのですが、呼び出すたびに「*TEST型変数にポインタを入れる」という作業をしなければならないので、何かと効率が悪いです。
何かうまい手はないでしょうか?
イグトランス
記事: 899 登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:
#2
投稿記事
by イグトランス » 2005年8月07日(日) 18:10
配列へのポインタもクラスにすれば、と思ったら駄目でした。
コード: 全て選択
Class TestPtrArray
Ptr As *VoidPtr
Size As DWord
Public
Function At(n As DWord) As *Test
If n <= Size Then
At = Ptr[n]
End If
End Function
/* 省略 */
End Class
Dim a As TestPtrArray
Dim i As Long
a.ArrayAlloc(3)
For i = 0 To 3
a.ObjectAlloc(i)
a.At(i)->b = 1 '「閉じカッコ ")" の後に不正な文字が含まれています」というエラー
' a.ObjectFree(i)
Next
'a.ArrayFree()
オブジェクトと配列の開放はデストラクタが行ってくれるようにしました
真紅
記事: 12 登録日時: 2005年7月20日(水) 17:59
連絡する:
#3
投稿記事
by 真紅 » 2005年8月08日(月) 23:22
結局こんな感じにしたら割と楽になりました。
コード: 全て選択
Class TEST
Public
b As Long
End Class
Dim a As *TEST
Dim i As Long
a = New[ELM(4)] TEST
For i = 0 To 3
a.b = 1
Next
Delete a
ただし数の変更が効かないのが難点ですね。
有難う御座いました。