0

I have created two classes, one being an interface for the other. Each time I try to instantiate Transition_Model I get:

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

To my understanding Implementing class is supposed to have a copy of all public subs, function, & properties. So I don't understant what is the problem here?

Have seen similar questions come up but either they refer to actual Sub or they include other complications making answer too complicated for me to understand.

Also note I tried changing Subs of Transition_Model to Private and add 'IModel_' in front of sub names(Just like top answer in second question I linked) but I still receive the same error.

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

Lastly the Sub I am using to test my class

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
Community
  • 1
  • 1
sgp667
  • 1,797
  • 2
  • 20
  • 38

1 Answers1

0

Actaully Per the second question I linked has the correct answer which I missed.

All subs need to start with 'IModel_' and rest ot the name has to match the name in IModel.

AND

This is the part i missed, you cannot use underscore in the Sub name.

sgp667
  • 1,797
  • 2
  • 20
  • 38