ab.com コミュニティ
https://www.activebasic.com/forum/

クラスのバグ
https://www.activebasic.com/forum/viewtopic.php?t=1776
ページ 11

作成者:  高信期 [ 2007年1月25日(木) 22:47 ]
記事の件名:  クラスのバグ

Virtual宣言のメソッドをオーバーライドしたメソッドを呼び出す時、
上位クラスのメソッドが呼び出される場合があります。
コード:
#prompt
Class CTest1
Protected
  m_Name As String
  Virtual Sub DoPrintMsg()
  End Sub

Public
  Sub CTest(AName As String)
    m_Name = AName
  End Sub

  Sub PrintMsg()
    DoPrintMsg()
  End Sub
End Class

Class CInheritsTest
  inherits CTest1
Protected
  Override Sub DoPrintMsg()
    Print m_Name
  End Sub
Public
  Sub CInheritsTest(AName As String)
    CTest(AName)
  End Sub

  Sub PrintMsg2()
    Print m_Name
  End Sub
End Class

Dim A As CInheritsTest("hoge")
A.PrintMsg()   '何も起きない
A.PrintMsg2()
あるメソッドで、同一クラスのある内部メソッドと同名の関数を呼び出そうとしても、
引数にかかわらず、内部メソッドを呼び出そうとしているとコンパイラが認識してしまい、
「パラメータ指定が間違っています」とエラーメッセージが表示されます。
コード:
#prompt
Sub AProc(Num As Long)
  Print Str$(Num)
End Sub

Class CTest2
Private
  Sub AProc()
    Print "AProcメソッドの呼び出し"
  End Sub
Public
  Sub BProc()
    AProc(10)
  End Sub
End Class

Dim A As CTest2
A.BProc()
String型の変数にmalloc, calloc関数の戻り値を代入できてしまいます。
#strict宣言してもエラー表示がされないので、修正していただけるとありがたいです。

お手数だとは思いますが修正のほどよろしくお願いいたします。

作成者:  OverTaker [ 2007年1月25日(木) 23:26 ]
記事の件名: 

引用:
あるメソッドで、同一クラスのある内部メソッドと同名の関数を呼び出そうとしても、
引数にかかわらず、内部メソッドを呼び出そうとしているとコンパイラが認識してしまい、
「パラメータ指定が間違っています」とエラーメッセージが表示されます。
こちらのバグについては、ライブラリ開発のフォーラムで、既に報告済みです。以下、その返信内容の引用です。
引用:
グローバル関数とクラスメソッドのオーバーロードですが、こちらも次回のバージョンアップで対応致します。ただし、構造の都合上、DLL関数をオーバーロードすることはできない制約を付ける形にさせてもらいます(すみません)。こちらも、後々は対応したいと思いますが、ちょっと今やるにはコード改変が多すぎるので、保留にさせてください(テキトーにチケットなげておいもらって良いです)。
引用:
String型の変数にmalloc, calloc関数の戻り値を代入できてしまいます。
Stringクラスですよね?こちらに関しては、それ以外にも、Long型を何の警告も出すことなく、Stringクラスに代入できたりしてしまいます。バグを引き起こす原因の一つになりやすいので、どうにか対処しようと、以下の仕様提案をしているところです。

http://www.activebasic.com/forum/viewtopic.php?t=1746
他にも方法があるかもしれませんが、私が思いついた方法はこんなものです。

ページ 11 全ての表示時間は UTC+09:00 です
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/