【发布时间】:2014-06-27 16:28:53
【问题描述】:
我正在做一个项目,但遇到了一些我不明白的事情。将数组分配给类成员时,Let 和 Get 名称不能相同。如果是,我会收到错误消息:
Definitions of property procedures for the same property are inconsistent, or property procedure has an optional parameter, a ParamArray, or an invalid Set final parameter
谁能告诉我是我做错了什么,还是事情就是这样。下面的代码生成上述消息。
测试代码:
Sub loadServer()
Dim testServer As AvayaServer
Dim i As Long
Dim arr() As Variant
arr = Array("1", "2", "3", "4", "5")
Set testServer = New AvayaServer
testServer.Name = "This Sucks"
testServer.Skill = arr
MsgBox testServer.Skills(4)
MsgBox testServer.Name
End Sub
类代码:
Private pName As String
Private pSkills() As String
Public Property Get Skills() As Variant
Skills = pSkills()
End Property
Public Property Let Skills(values() As Variant)
ReDim pSkills(UBound(values))
Dim i As Long
For i = LBound(values) To UBound(values)
pSkills(i) = values(i)
Next
End Property
【问题讨论】:
-
将
values() As Variant更改为values As Variant -
@simoco 谢谢!我知道我必须错过一些愚蠢的事情
-
@vbnoob 它确实很傻(这件事,不是你错过了它) - 一个奇怪的怪癖。
values As Variant将是一个 Variant,您稍后将使用它来存储一个数组,values() As Variant是一个 Variant 数组。 Array 函数只能分配给前者。我还假设testServer.Skill(注意没有“s”)只是上面的拼写错误。如果不是,请更改您的代码,我建议将Option Explicit放在模块的顶部。 -
@Cor_Blimey,
testServer.Skill只是出于部分意图。最初,为了使代码与Let Skill(values() As Variant一起工作,必须使用它。这确实是帖子中的一个疏忽,因为我没有更正所有代码。感谢您了解这一点。