ab.com コミュニティ https://www.activebasic.com/forum/ |
|
クラスのバグ https://www.activebasic.com/forum/viewtopic.php?t=1776 |
ページ 1 / 1 |
作成者: | 高信期 [ 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 他にも方法があるかもしれませんが、私が思いついた方法はこんなものです。 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |