VB 数据类型

feifc 2012-04-12 10:14:53
问题:
我在模块里定义如下:

Public Type ObsVal
P1 As Double 'L1上的P码伪距
End Type

Public Type XYZRS
rx As Double
ry As Double
rz As Double
End Type

Public Type O_Data
data() As ObsVal
ComSateRS() As XYZRS
End Type

Public Type Ofile
LiYuan() As O_Data
End Type
Public Odata1 As Ofile

问题:
for i = 1 to 10
For j = 1 To n
Odata1.LiYuan().ComSateRS(j).rx = 3
Next j
nenxt i
为什么会显示 Odata1.LiYuan().ComSateRS(j).rx 下标越界 ??

奇怪的是:
 for i = 1 to 10
For j = 1 To n
4=Odata1.LiYuan().data(j).P1
Next j
next i
竟然可以成立

为什么上面就是下标越界 下面的可以运行呢 ??



...全文
70 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2012-04-14
  • 打赏
  • 举报
回复
自定义类型里,使用动态数组,那么你必须在使用动态数组前,进行分配单元

Private Sub Command2_Click()
dim A as O_Data
redim a.data(100)
redim a.ComSateRS(20)
end sub
feifc 2012-04-13
  • 打赏
  • 举报
回复
追问:
我定义的rx ,ry,rz 为double ,为什么用监视窗口看 Odata1.LiYuan().ComSateRS(j).rx 类型为integer 所以显示就下标越界了 。而Odata1.LiYuan().data(j).P1 显示为double
王二.麻子 2012-04-13
  • 打赏
  • 举报
回复
4=Odata1.LiYuan().data(j).P1

语法错误.

你最好是把程序贴上了,而不是在这里敲...你在这里敲得也许和你实际测试的不同.
王二.麻子 2012-04-13
  • 打赏
  • 举报
回复
类型里面用了不定长度的数组,这个数组初始化了没有?

怎么也得有个redim之类吧?

Public Type abc
a() As Integer
End Type
Public Type ccc
a As abc
End Type

Private Sub Form_Load()
Dim xx As ccc
ReDim xx.a.a(0 To 2)
Debug.Print xx.a.a(1)
End Sub

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧