读书人

结构体中又定义结构体变量解决方法

发布时间: 2012-01-07 21:41:55 作者: rapoo

结构体中又定义结构体变量
Module Module1

Structure lessonsType
Dim subjects As String '科目
Dim score As Short '分数
End Structure
Structure studType
Dim num As Long '学号
Dim name As String '姓名
Dim lessons() As lessonsType '成绩
End Structure
Sub Main()
Dim weiwei As studType
With weiwei
.num = 4111212
.name = "小军"
.lessons(0).subjects = "高等数学"
.lessons(0).score = 95

.lessons(1).subjects = "线性代数"
.lessons(1).score = 90
End With
Console.WriteLine("学号" & ":")
Console.WriteLine(weiwei.num)

Console.Write("姓名" & ":")
Console.WriteLine(weiwei.name)




Console.Write(weiwei.lessons(0).subjects & ":")
Console.WriteLine(weiwei.lessons(0).score)

Console.Write(weiwei.lessons(1).subjects & ":")
Console.WriteLine(weiwei.lessons(1).score)

End Sub

End Module

错误行:.lessons(0).subjects = "高等数学"

错误提示:
未处理的“System.NullReferenceException”类型的异常出现在 ConsoleApplication1.exe 中。

其他信息: 未将对象引用设置到对象的实例。

刚学VB.NET,不知道结构体中又定义结构体变量是不是不可以象上面那样定义.


[解决办法]
studType里面的lessons是一个lessonsType的数组,数组是引用类型(和数组里面元素的类型无关),值类型中的引用类型默认初始化的值是Nothing,所以:
Dim weiwei As studType
之后,weiwei.lessons是Nothing,访问Nothing的第0个元素,当然是空引用错误
[解决办法]
使用数组时,要定义长度才行


Module Module1

Structure lessonsType
Dim subjects As String '科目
Dim score As Short '分数
End Structure
Structure studType
Dim num As Long '学号
Dim name As String '姓名
Dim lessons() As lessonsType '成绩
End Structure
Sub Main()
Dim weiwei As studType
With weiwei
.num = 4111212
.name = "小军"
redim .lessons(1)
.lessons(0).subjects = "高等数学"
.lessons(0).score = 95

.lessons(1).subjects = "线性代数"
.lessons(1).score = 90
End With
Console.WriteLine("学号" & ":")
Console.WriteLine(weiwei.num)

Console.Write("姓名" & ":")
Console.WriteLine(weiwei.name)


Console.Write(weiwei.lessons(0).subjects & ":")
Console.WriteLine(weiwei.lessons(0).score)

Console.Write(weiwei.lessons(1).subjects & ":")
Console.WriteLine(weiwei.lessons(1).score)

End Sub

End Module

[解决办法]
变长数组lessons() 要用Redim初始化以后才能使用

读书人网 >VB Dotnet

热点推荐