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

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

2012-01-07 
结构体中又定义结构体变量Module Module1Structure lessonsTypeDim subjects As String科目Dim score As

结构体中又定义结构体变量
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初始化以后才能使用

热点排行