今天在用VB编矩阵计算的时候。编写了个子程序,不过调用的时候老是出现BeRef参数类型不符的错误提示。后来才找到了原因,其实原来很简单。如下面这2段程序,运行起来第二段代码就会出现BeRef参数类型不符的错误提示。Function sum(a As Integer, b As Integer)
sum = a + b
End Function
Private Sub Command1_Click()
Dim m As Integer
Dim n As Integer
m = Val(Text1.Text)
n = Val(Text2.Text)
MsgBox (sum(m, n))
End Sub 

Private Sub Command1_Click()
Dim m, n As Integer
m = Val(Text1.Text)
n = Val(Text2.Text)
MsgBox (sum(m, n))
End Sub

原因就在于:在第一段代码里面,我们分别定义了m和n的类型都为integer。但在第二段代码里面,虽然写了Dim m, n As Integer,但实际上我们只定义了n为integer,而没有定义m的类型,而对于未指定类型的变量,VB自动将它定义为Variant类型了,这就 导致了引用sum函数的时候BeRef参数类型不符合了。我以前一直认为Dim m, n As Integer,就是将m和n同时定义为integer类型了,而且像这种小错误,很容易犯,却又很不容易找出,因为很容易被忽略。看来编程过程中,语法 的小错误就必须靠多写代码来避免了。

顺便带下,VB有两种传递参数值的方法:ByRef表示传递的是参数的地址,ByVal表示传递的是 参数的值。ByRef是VB默认的参数传递方式,如果指定传递的是参数的值要使用关键字ByVal。而如果传递的是参数的值,VB在大多数情况下会自动转 换,及时参数声明的类型和实际参数的类型不同也问题不大。但是,如果采用ByRef,则要求参数声明的类型和实际参数的类型完全相同,否则VB就会报告错 误。 

Feed Me


转载文章请注明转载自:ThinkAgain - Let's Blog!

引用地址:http://www.thinkagain.cn/archives/39.html