【一个很简单的但是却困惑我这个初学者的VB定义变量问题,谁能解释下】

来源:百度知道 编辑:UC知道 时间:2024/06/02 02:10:45
代码如下,下面是正解的代码,或者说是可行的代码,都是我自己写的: Private Function fac(n As Integer) As BooleanDim i As IntegerDim flag As Booleanflag = TrueFor i = 2 To n - 1 Step 1 If n Mod i = 0 Then flag = False Exit For End IfNext ifac = flagEnd Function Private Sub Form_Click()Dim i As Integer, j As Integer(这一行去掉后就不行了)For i = 100 To 999 If fac(i) = True Then Print i; Space(5); j = j + 1 If j Mod 10 = 0 Then Print End If End IfNext iEnd Sub但是我把:“Dim i As Integer, j As Integer”去掉后就不能执行了,说是什么编译错误,详细见我的链接:程序运行时候的样子:
错误提示:
谁能解释下这里面的原理是为什么,我就是不定义又能怎么样,哪位高手能解释这里面到底是为什么?

私有函数里必须先定义后使用,或是声明

1楼是正解

如果楼主真的想不声明的话,可以在IDE的菜单栏中点击“工具”->"选项.."->"编辑器",把“要求变量声明”去掉。这样做的结果是程序运行起来可能会比原来多些内存。但是不要担心,现在的内存大的让人无法抵制这购买的诱惑!

还有个办法就是在类里面直接把变量声明下。这样就算在函数模块中没有声明也能使用,但是注意使用前对变量初始化,还有就是不要同时有2个函数一起使用它。这是个很危险的办法,但是如果是个很会设计的程序员,这个方法不为一个很省内存的办法。

为什么是提示ByRef型不一致,而不是提示变量未定义?
你自定义的fac函数的参数类型是地址传递(即ByRef,VB的默认参数类型),把参数类型改成数值传递(ByVal)就可以了,如下:
Private Function fac(ByVal n As Integer) As Boolean

VB6是允许变量进行隐式声明的,所以楼主那样写没错,只要把参数类型改了照样能运行.如果要限制隐式声明,只要在模块头部加上Option Explicit(强制变量声明) 就可以了.

以下是从网上贴来的:
Option Explicit 语句 在模块级别中使用,强制显式声明模块中的所有变量。语法Option Explicit说明如果使用,Option Explicit 语句必须写在模块的所有过程之前。如果模块中使用了 Option Explicit,则必须使用 Dim、Private、Public、ReDim 或 Static 语句来显式声明所有的变量。如果使用了未声明的变量名在编译时间会出现错误。如果没有使用 Option Explicit 语句,除非使用 Deftype 语句指定了缺省类型,否则所有未声明的变量都是 Variant 类型的。使用 Option Explicit 可以避免在键入已有变量时出错,在变量的范围不是很清楚的代码中使用该语句可以避免混乱。

可以通过选项设定变量是否要定义才能使用

你把Private Function fac(n As Integ