ab.com コミュニティ https://www.activebasic.com/forum/ |
|
クラスの新機能のバグ https://www.activebasic.com/forum/viewtopic.php?t=1521 |
ページ 1 / 1 |
作成者: | 高信期 [ 2006年9月06日(水) 02:19 ] |
記事の件名: | クラスの新機能のバグ |
AB5CP2のその他の変更点において、 >自信のクラスと同一のクラス型オブジェクトに対するプライベート メンバ/メソッドへのアクセスを許可するように改良。 とあるわけですが、自身と同一のクラスの引数があるメソッドで、Private, Protectedなメンバに触ろうとしても コンパイル時に「Privateメンバ~」というエラーが出てしまいます。 また、Newで生成されたクラスにおいて、演算子オーバーロードを実行するとアクセス違反が起こります。 32bit WinXpHome IE6という環境で確認しました。 お忙しいとは思いますが、修正のほどよろしくお願いいたします。 コード: Class CTest Private Num As Long Public Sub Assign(ByRef Source As CTest) Num = Source.Num End Sub Function getNum() As Long getNum = Num End Function Sub setNum(Value As Long) Num = Value End Sub Sub Operator = (Value As Long) setNum(Value) End Sub End Class #prompt 'Privateメンバにアクセスする Dim A As CTest, B As CTest A = 10 B.Assign(A) Print B.getNum() '動的なクラスの演算子オーバーロードを実行する 'Dim C As *CTest 'C = New CTest 'C = 10 'Delete C |
作成者: | イグトランス [ 2006年9月06日(水) 10:43 ] |
記事の件名: | |
コード: Dim C As *CTest C = New CTest C = 10 Delete CこれはCというポインタ変数に10という数値を代入されていると解釈されます。 だからOperator =が呼ばれないのです。 C[0] = 10とすればOperator =が呼ばれ,正常に動くはずです。 #間接参照演算子(*)があったほうが良いのかもしれません。 |
作成者: | 高信期 [ 2006年9月06日(水) 23:34 ] |
記事の件名: | |
なるほど。了解しました。 ただ、 コード: C[0] = 10というのはいかにも気持ち悪いので、間接参照演算子が欲しいところです。 ByValあたりがいいような。 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |