ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月28日(日) 07:38

全ての表示時間は UTC+09:00 です




返信する
ユーザー名:
件名:
メッセージ本文:
メッセージを入力してください。60000 字まで入力できます。 

フォントサイズ:
フォントカラー
オプション:
BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF
BBCode を無効にする
URL を自動的にパースしない
クイズ
お手数ですがカタカナで「エービー」と4文字を入力してください。:
答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。
   

トピックのレビュー - ByRef引数を持つ関数のオーバーロードができない
作成者 メッセージ
  記事の件名:   引用付きで返信する
> 配列でないものに添え字演算子を使うのが気持ち悪いですが,
> このバグが修正されるまではとりあえずこれで我慢してはどうでしょう。
はい、そうします。
投稿記事 Posted: 2006年5月29日(月) 02:03
  記事の件名:   引用付きで返信する
Test(b[0])とすればコンパイルできオーバーロードも正しく解決されます。
配列でないものに添え字演算子を使うのが気持ち悪いですが,
このバグが修正されるまではとりあえずこれで我慢してはどうでしょう。

個人的には間接参照演算子(C/C++の単項 * )のようなものがあればいいのにと思います。(しかも後置演算子として)
投稿記事 Posted: 2006年5月27日(土) 21:40
  記事の件名:  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
あ。普通の関数でオーバーロード(ライド?)できるようになってたんですね。気付かなかった。
投稿記事 Posted: 2006年5月27日(土) 21:34
  記事の件名:  返信@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) 
こうだとうまくいくと思いますが...。
ほんと関数のオーバーロードは知らないので、間違っていたらすみません...。
投稿記事 Posted: 2006年5月27日(土) 21:28
  記事の件名:  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" オーバーロードを解決できません
投稿記事 Posted: 2006年5月08日(月) 02:57

全ての表示時間は UTC+09:00 です


ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean