2015-03-31 103 views
0

我創建了兩個類,一個是另一個的接口。每次我嘗試實例Transition_Model我得到:VBA對象模塊必須實現〜?

Compile error: Object Module needs to implement '~' for interface'~'

據我瞭解實現類都應該有所有的公共潛艇,功能,&屬性的副本。所以我不明白這裏有什麼問題?

看到過類似的問題,但他們提到actual Sub或他們包括other complications答案太複雜,我不明白。

另請注意我試着將Transition_Model的Subs更改爲Private,並在子名稱前添加'IModel_'(就像我鏈接的第二個問題的頂部答案),但仍然收到相同的錯誤。

IModel

Option Explicit 
Public Enum Model_Types 
     Transition 
     Dummy 
End Enum 
Property Get M_Type() As Model_Types 
End Property 
Sub Run(Collat As Collateral) 
End Sub 
Sub Set_Params(key As String, value As Variant) 
End Sub 

Transition_Model

Option Explicit 
Implements IModel 
Private Transitions As Collection 
Private Loan_States As Integer 
Private Sub Class_Initialize() 
    Set Transitions = New Collection 
End Sub 
Public Property Get M_Type() As Model_Types 
    M_Type = Transition 
End Property 
Public Sub Run(Collat As Collateral) 
    Dim A_Transition As Transition 
    Dim New_Balance() As Double 
    Dim Row   As Integer 

    For Row = 1 To UBound(Collat.Curr_Balance) 
     For Each A_Transition In Transitions 
      If A_Transition.Begining = i Then 
       New_Balance = New_Balance + Collat.Curr_Balance(Row) * A_Transition.Probability 
      End If 
     Next A_Transition 
    Next 
End Sub 
Public Sub Set_Params(key As String, value As Double) 
    Dim Split_key(1 To 2) As String 
    Dim New_Transition As Transition 

    Split_key = Split(key, "->") 
    Set New_Transition = New Transition 

    With New_Transition 
     .Begining = Split_key(1) 
     .Ending = Split_key(2) 
     .Probability = value 
    End With 

    Transitions.Add New_Transition, key 
End Sub 

最後我使用來測試我的課

Sub Transition_Model() 
    Dim Tested_Class As New Transition_Model 
    Dim Collat As New Collateral 

    'Test is the model type is correct 
    Debug.Assert Tested_Class.M_Type = Transition 

    'Test if Model without transition indeed does not affect balances of its collateral 
    Collat.Curr_Balance(1) = 0.5 
    Collat.Curr_Balance(2) = 0.5 

    Tested_Class.Run (Collat) 

    Debug.Assert (_ 
     Collat.Curr_Balance(1) = 0.5 And _ 
     Collat.Curr_Balance(2) = 0.5) 

End Sub 

回答

0

Actaully每我聯繫第二個問題分有正確的答案,我錯過。

所有潛艇都需要以'IModel_'開頭,並且其名稱必須與IModel中的名稱匹配。

這是我錯過了,您不能使用子名稱下劃線的部分。

相關問題