首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

为什么数组acuZ(32)调用sub过程时显示类型不匹配

2012-08-08 
为何数组acuZ(32)调用sub过程时显示类型不匹配?acuX和acuY是可以的呀?我感觉这三个玩意儿无差啊- -斯巴达

为何数组acuZ(32)调用sub过程时显示类型不匹配?
acuX和acuY是可以的呀?我感觉这三个玩意儿无差啊- -斯巴达了- -
求解!!!!!!!!!!!!

VB code
Option Base 1Private Sub Form_Load()Dim opWord As StringDim timeCount As IntegerDim LXnx(32), LYnx(32), LZnx(32), Lkx As DoubleDim acuX(32), acuY(32), acuZ(32) As DoubleDim numofSta As IntegerDim max(3), min(3) As IntegernumofSta = 32Lkx = 1'判断是否属于已知节点,若是,数据变。For i = 1 To numofPoint    If timeData(i) = interSec Then        isGivenNum = True        timeData(i) = 0        ReDim coordDataX(numofPoint - 1, 32)        ReDim coordDataY(numofPoint - 1, 32)        ReDim coordDataZ(numofPoint - 1, 32)        For k = i To numofPoint - 1            timeData(k) = timeData(k + 1)        Next k        ReDim Preserve timeData(numofPoint - 1)        For j = 1 To 32            For k = 1 To i - 1                coordDataX(k, j) = oricoordDataX(k, j)                coordDataY(k, j) = oricoordDataY(k, j)                coordDataZ(k, j) = oricoordDataZ(k, j)            Next k                            For k = i To numofPoint - 1                coordDataX(k, j) = oricoordDataX(k + 1, j)                coordDataY(k, j) = oricoordDataY(k + 1, j)                coordDataZ(k, j) = oricoordDataZ(k + 1, j)            Next k                        Next j        Exit For    ElseIf timeData(i) > interSec Then        Exit For            End IfNext i'寻找可以使用的卫星,如果可以使用,则计算,如果不可使用,则输出一行字并跳过For i = 1 To 32    '以下是剔除不可用的卫星    '{        If coordDataX(1, i) = 0 Then            opWord = opWord & vbCrLf & "第" & i & "号卫星信息不存在..."            numofSta = numofSta - 1            GoTo NextPoint         End If    '}         For j = beginPoint To (beginPoint + n)            '以下是剔除不可用的卫星            '{                Lkx = 1                If coordDataX(j, i) = 0 Then                    opWord = opWord & vbCrLf & "第" & i & "号卫星信息中断..."                    LXnx(i) = 0                    LYnx(i) = 0                    LZnx(i) = 0                    numofSta = numofSta - 1                    GoTo NextPoint                End If            '}                        '若存在,则计算            '{                                For k = beginPoint To (beginPoint + n)                    If j = k Then                        GoTo Skip                    End If                                        Lkx = Lkx * ((interSec - timeData(k)) / (timeData(j) - timeData(k)))Skip:                Next k                                                                                        LXnx(i) = LXnx(i) + coordDataX(j, i) * Lkx                LYnx(i) = LYnx(i) + coordDataY(j, i) * Lkx                LZnx(i) = LZnx(i) + coordDataZ(j, i) * Lkx            '}                    Next j    If isGivenNum = True Then        acuX(i) = oricoordDataX(insecPoint + 1, i) - LXnx(i)        acuY(i) = oricoordDataY(insecPoint + 1, i) - LYnx(i)        acuZ(i) = oricoordDataZ(insecPoint + 1, i) - LZnx(i)        opWord = opWord & vbCrLf & "第" & i & "号卫星在该时刻的坐标为:" & vbCrLf & "X:" & LXnx(i) & "   Y:" & LYnx(i) & "   Z:" & LZnx(i) _        & vbCrLf & "         在该时刻的误差为: " & vbCrLf & "dX:" & acuX(i) & "   dY:" & acuY(i) & "   dZ:" & acuZ(i)    Else        opWord = opWord & vbCrLf & "第" & i & "号卫星在该时刻的坐标为:" & vbCrLf & "X:" & LXnx(i) & "   Y:" & LYnx(i) & "   Z:" & LZnx(i)    End If    NextPoint:Next i'若是已知卫星坐标,则对原始数据进行还原!If isGivenNum = True Then    ReDim coordDataX(numofPoint, 32)    ReDim coordDataY(numofPoint, 32)    ReDim coordDataZ(numofPoint, 32)    For i = 1 To 32        For j = 1 To numofPoint            coordDataX(j, i) = oricoordDataX(j, i)            coordDataY(j, i) = oricoordDataY(j, i)            coordDataZ(j, i) = oricoordDataZ(j, i)        Next j    Next i    ReDim timeData(numofPoint)    For i = 1 To numofPoint        timeData(i) = oritimeData(i)    Next i    End IfCall MinAndMax(min(1), max(1), acuX())Call MinAndMax(min(2), max(2), acuY())Call MinAndMax(min(3), max(3), acuZ())Text3.Text = min(1) & "-" & max(1)Text4.Text = min(2) & "-" & max(2)Text5.Text = min(3) & "-" & max(3)Text1.Text = opWordText2.Text = numofSta            End SubPrivate Sub MinAndMax(min, max, Num())Dim i As Integermin = Num(1)max = Num(1)    For i = 1 To UBound(Num())        If Num(i) < min Then            min = Num(i)        End If        If Num(i) > max Then            max = Num(i)        End If    Next iEnd Sub 



[解决办法]
Dim [WithEvents] varname[([subscripts])] [As [New] type] [, [WithEvents] varname[([subscripts])] [As [New] type]] . . .
这是VB的变量声明格式,Dim acuX(32), acuY(32), acuZ(32) As Double前两个是variant类型,最后一个是double型,没看你代码,估计是这儿的问题……
[解决办法]
LZ没有适应VB的习惯啊

Dim acuX(32), acuY(32), acuZ(32) As Double
只有最后一个acuZ为Double类型。前两个为Variant类型,这样类型应该确实不匹配了

Dim acuX(32) As Double, acuY(32) As Double, acuZ(32) As Double

热点排行
Bad Request.