vb的结构体内定义数组可以吗?为什么我改不了结构体里面数组的维数上下限。导致后面我赋值的时候出现了““System.NullReferenceException”类型的未经处理的异常”。代码如下,希望各位大神帮忙解答,小弟感激不尽!
   
 Structure chorm
        Dim bit() As Integer
        Dim fit As Single
    End Structure
Public popcurrent(3) As chorm    Public Sub startpop()  
        Dim i As Integer, j As Integer, random As Integer, value As Single
        For i = 0 To 3        
            For j = 0 To 5   
                random = Rnd()
                random = random Mod 2           
                popcurrent(i).bit(j) = random   
            Next
            '  modelvalue(popcurrent(i))    
            '  popcurrent(i).fit = fitness()
        Next
    End Sub

解决方案 »

  1.   

    Dim bit(5) As Integer '使用定长Integer数组
      

  2.   

    别听赵四的,type里面可以定义动态数组。
    举个栗子
    Private Type test
        inttst As Integer '整形成员
        arytst() As Integer '动态数组成员
    End Type
    Private Sub Command1_Click()
        Dim i As Integer
        Dim a As test
        ReDim a.arytst(5) '定义数组成员
        a.inttst = 100 '整数成员赋值
        For i = 0 To 5 '数组成员赋值
            a.arytst(i) = i * 2
        Next
        Debug.Print a.arytst(5) '检验结果
        
        ReDim a.arytst(10) '再次重定义数组成员
        For i = 0 To 10 '数组成员赋值
            a.arytst(i) = i * 3
        Next
        Debug.Print a.arytst(10) '检验结果End Sub
      

  3.   

    能正常和外部DLL或Win API中定义的结构体互通?
      

  4.   

    看楼主的“代码语法”,应该是VB.NET的吧!在VB6中,“结构体”内定义动态数组、固定数组都是没问题的。
    区别在于:用固定数组,“数据元素空间”是按类型、数量等,直接分配在“结构体”的成员空间内;
      但用“动态数组”,那么它只是一个“数组指针”而已(不管什么类型、是否“有数组元素”等),总是占4字节空间。估计在VB.NET中,这方面的特性,应该跟VB6是一样的,只是具体的“使用细节”上可能有点差异而已。
     就算“有点差异”也主要是因为语法差异造成,可以忽略的。
      

  5.   

    能正常和外部DLL或Win API中定义的结构体互通?
    “外部DLL或Win API中定义的结构”几乎都是“确定结构长度”的,如果有“数组成员”都是用的固定数组;
    但在“VB6工程内”的自定义数据类型,用到的数组成员,绝大多数情况下都必须用动态数组。这二者不能混为一谈的!
      

  6.   

    能正常和外部DLL或Win API中定义的结构体互通?能否举个栗子哪个win API里面的struct有数组?目前我用到的API涉及不定长的信息的函数原型里都是指针。
    楼主的需求目前看只是程序内部自己使用。需求就是要不定数组!
    针对需求解决问题,不要扩大没必要的应用场景增加无意义的争论。