クラスの新機能のバグ

ActiveBasicのバグと思われる不具合を発見された方は、こちらから知らせていただけると助かります。
返信する
メッセージ
作成者
高信期

クラスの新機能のバグ

#1 投稿記事 by 高信期 »

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
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#2 投稿記事 by イグトランス »

コード: 全て選択

Dim C As *CTest 
C = New CTest 
C = 10 
Delete C
これはCというポインタ変数に10という数値を代入されていると解釈されます。
だからOperator =が呼ばれないのです。
C[0] = 10とすればOperator =が呼ばれ,正常に動くはずです。

#間接参照演算子(*)があったほうが良いのかもしれません。
高信期

#3 投稿記事 by 高信期 »

なるほど。了解しました。
ただ、

コード: 全て選択

C[0] = 10
というのはいかにも気持ち悪いので、間接参照演算子が欲しいところです。
ByValあたりがいいような。
返信する