Страницы: 1
RSS
Ошибка Circular dependencies between modules, Причины возникновения ошибки
 
Столкнулся с ошибкой:
Цитата

Compile error:
Circular dependencies between modules
Проблема оказалась в следующем (всё лишнее выкинуто):
Есть модуль, где определены пользовательские типы "Типы":
Код
Public Type типДанные
    ТабНомер As Integer
    Объект As String
    ТипОбъ As enСистема  'Сюда идёт ссылка из класса Class1
End Type

Public Enum enAccessMode    'Сюда ссылаются интерфейс IClass и класс Class1
    Оператор = 0
    Администратор = 1
    Программист = 2
End Enum

Есть класс, описывающий интерфейс "IClass":
Код
'Модуль описывает интерфейс классов для хранения данных
'Вывести на экран форму для редактирования
Public Function Редактировать(ByVal Доступ As enAccessMode) As Variant: End Function

Есть рабочий класс "Class1" в котором используется интерфейс:
Код
Implements IClass 'Применяем интерфейс
Public Enum enСистема
    Особая = 3   
End Enum

Private Function IClass_Редактировать(ByVal Доступ As enAccessMode) As Variant 'Ошибка отображалась в этой строке
    IClass_Редактировать = FrmClass1.NewShow(Me, Доступ)
End Function

Пока не убрал определение перечисления enСистема из модуля класса в стандартный модуль, ошибка не пропала.
Похоже, что транслятор видел зацикленность определений между модулями. Отмечу, что другие классы, применяющие этот интерфейс, работают без проблем, но в них нет Public Enum. Ошибка проявилась только в Class1.
Вообще, прихожу к мнению, что все Public Enum и Public Type должны быть собраны в стандартном модуле, а в классах оставлять только скрытые определения.
Пример не прикладываю, поскольку это достаточно большая программа и вырывать кусок достаточно муторно.
 
Я не понял - а зачем перечисление в классе? Вы же не можете всё равно написать так:

Код
'Псевдо-код 
Class Class1()  
    Public Enum E1  
        S 
        R
    End Enum
End Class 

Sub FFF()
   Dim C As Class1.E1
End Sub 
There is no knowledge that is not power
 
Просто перечисление изначально было необходимо в классе и было Private, но потом, по мере развития программы, пришлось сделать его Public. Модуль Типы появился ещё позже.
Страницы: 1
Наверх