Столкнулся с ошибкой:
Проблема оказалась в следующем (всё лишнее выкинуто):
Есть модуль, где определены пользовательские типы "Типы":
Есть класс, описывающий интерфейс "IClass":
Есть рабочий класс "Class1" в котором используется интерфейс:
Пока не убрал определение перечисления enСистема из модуля класса в стандартный модуль, ошибка не пропала.
Похоже, что транслятор видел зацикленность определений между модулями. Отмечу, что другие классы, применяющие этот интерфейс, работают без проблем, но в них нет Public Enum. Ошибка проявилась только в Class1.
Вообще, прихожу к мнению, что все Public Enum и Public Type должны быть собраны в стандартном модуле, а в классах оставлять только скрытые определения.
Пример не прикладываю, поскольку это достаточно большая программа и вырывать кусок достаточно муторно.
Цитата |
---|
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 должны быть собраны в стандартном модуле, а в классах оставлять только скрытые определения.
Пример не прикладываю, поскольку это достаточно большая программа и вырывать кусок достаточно муторно.