ab.com コミュニティ https://www.activebasic.com/forum/ |
|
ByRef引数を持つ関数のオーバーロードができない https://www.activebasic.com/forum/viewtopic.php?t=1014 |
ページ 1 / 1 |
作成者: | k.kiyo [ 2006年5月08日(月) 02:57 ] |
記事の件名: | ByRef引数を持つ関数のオーバーロードができない |
引数に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 [ 2006年5月27日(土) 21:28 ] |
記事の件名: | 返信@yu0627 |
あまりオーバーロードに詳しくありませんが、元々無理だと思います。 なぜなら、同じ名前の関数が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 [ 2006年5月27日(土) 21:34 ] |
記事の件名: | Re: ByRef引数を持つ関数のオーバーロードができない |
> 引数に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あ。普通の関数でオーバーロード(ライド?)できるようになってたんですね。気付かなかった。 |
作成者: | イグトランス [ 2006年5月27日(土) 21:40 ] |
記事の件名: | |
Test(b[0])とすればコンパイルできオーバーロードも正しく解決されます。 配列でないものに添え字演算子を使うのが気持ち悪いですが, このバグが修正されるまではとりあえずこれで我慢してはどうでしょう。 個人的には間接参照演算子(C/C++の単項 * )のようなものがあればいいのにと思います。(しかも後置演算子として) |
作成者: | k.kiyo [ 2006年5月29日(月) 02:03 ] |
記事の件名: | |
> 配列でないものに添え字演算子を使うのが気持ち悪いですが, > このバグが修正されるまではとりあえずこれで我慢してはどうでしょう。 はい、そうします。 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |