ActiveBasicのバグと思われる不具合を発見された方は、こちらから知らせていただけると助かります。
k.kiyo
#1
投稿記事
by k.kiyo » 2006年5月08日(月) 02:57
引数にByRefが指定されている関数のオーバーロードができません。
ポインタ引数の場合は正常にオーバーロードできます。
コード: 全て選択
Sub Test()
End Sub
Sub Test(p As *Long)
End Sub
Sub Test(ByRef p As Long)
End Sub
Dim a As Long, b As *Long
b = VarPtr(a)
Test() 'OK
Test(b) 'OK
Test(ByVal b) '"Test" オーバーロードを解決できません
yu0627
記事: 154 登録日時: 2005年5月31日(火) 14:53
#2
投稿記事
by yu0627 » 2006年5月27日(土) 21:28
あまりオーバーロードに詳しくありませんが、元々無理だと思います。
なぜなら、同じ名前の関数が3つもあるからです。
コード: 全て選択
Sub Test()
End Sub
Sub Test2(p As *Long)
End Sub
Sub Test3(ByRef p As Long)
End Sub
Dim a As Long, b As *Long
b = VarPtr(a)
Test() 'OK
Test2(b) 'OK
Test3(ByVal b)
こうだとうまくいくと思いますが...。
ほんと関数のオーバーロードは知らないので、間違っていたらすみません...。
7
記事: 473 登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
#3
投稿記事
by 7 » 2006年5月27日(土) 21:34
> 引数にByRefが指定されている関数のオーバーロードができません。
> ポインタ引数の場合は正常にオーバーロードできます。
たぶんですけど、すでにLong型変数へのポインタを引数とする関数が同じ名前で定義されてるからじゃないでしょうか。
コード: 全て選択
Class CTest
Public
' Long型変数へのポインタ p を引数とする
Sub Test(ByVal p As *Long)
End Sub
' Long型変数へのポインタ p を引数とする
Sub Test(ByRef p As Long)
End Sub
End Class
あ。普通の関数でオーバーロード(ライド?)できるようになってたんですね。気付かなかった。
イグトランス
記事: 899 登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
#4
投稿記事
by イグトランス » 2006年5月27日(土) 21:40
Test(b[0])とすればコンパイルできオーバーロードも正しく解決されます。
配列でないものに添え字演算子を使うのが気持ち悪いですが,
このバグが修正されるまではとりあえずこれで我慢してはどうでしょう。
個人的には間接参照演算子(C/C++の単項 * )のようなものがあればいいのにと思います。(しかも後置演算子として)
k.kiyo
#5
投稿記事
by k.kiyo » 2006年5月29日(月) 02:03
> 配列でないものに添え字演算子を使うのが気持ち悪いですが,
> このバグが修正されるまではとりあえずこれで我慢してはどうでしょう。
はい、そうします。