О бедных классах замолвите...
Добавлено: 30 апр 2020, 14:36
И снова тяжкие думы на тему "класс или не класс".
Ситуация:
Есть некий (мой) модуль с интерфейсом и богатым внутренним миром. И в этом мире активно живут разные классы (и акторы). Маленький скромный модуль. Пусть он будет модуль А.
И в модуле А у одного из классов есть саб, который из файла извлекает техническую информацию. пусть он будет Finfo
Появляется большой проект (большой бос - ББ), который начинает эксплуатировать этого простого скромного работягу, встраивая к себе в subpanel и заодно увёл в рабство его детей, а точнее, пока только одного единственного Finfo.
Итого.
Есть А (библиотека с набором классов) и саб однго из классов Finfo.
Есть ББ - большая программа, которая встраивает А И заодно в своих функциях использует Finfo.
В исходниках всё нормально работает, но начинаем компилировать и появляются проблемы. Дошли до простого теста: компилируем минимально рабочий кусок ББ, который использует Finfo, проблема та же.
Если удалить вызов Finfo тест компилируется успешно.
вопрос: что с этим делать?
Поиск даёт в основном три рецепта:
- включить дебаг (самый бесполезный, об этом ниже)
- отключиться от всех typedef и сократить всё по минимуму - не помогло
- очистить кэш компилятора - не помогло
- принудительно добавить в сборку библиотеку - не помогло.
дебаг включаем, компилируется успешно, но программа получается ломанной.
Подключаемся к ней дебагером, и в исходниках видим "всё пропало" в прямом смысле: ни одного саба нет, все как бы потеряны.
Получается, что нельзя использовать сабы класса (не приватные) вне класса при некоторых обстоятельствах?
Ситуация усугубилась после экспорта.
Сначала для проверки концепции в ББ встраивали оригинал А, после успешного теста решили сделать клон А (АА), потому что надо будет немного ковырять АА. И вот после этго всё сломалось. Клон делал автоматом через "сохранить как..."
Вызовы перепроверили три раза. Для надёжности даже на этой машине удалили полностью папку А, так что ББ вызывает только АА, в исходниках всё работает, а в сборке ломается.
Есть идеи или рецепты лечения?
Ситуация:
Есть некий (мой) модуль с интерфейсом и богатым внутренним миром. И в этом мире активно живут разные классы (и акторы). Маленький скромный модуль. Пусть он будет модуль А.
И в модуле А у одного из классов есть саб, который из файла извлекает техническую информацию. пусть он будет Finfo
Появляется большой проект (большой бос - ББ), который начинает эксплуатировать этого простого скромного работягу, встраивая к себе в subpanel и заодно увёл в рабство его детей, а точнее, пока только одного единственного Finfo.
Итого.
Есть А (библиотека с набором классов) и саб однго из классов Finfo.
Есть ББ - большая программа, которая встраивает А И заодно в своих функциях использует Finfo.
В исходниках всё нормально работает, но начинаем компилировать и появляются проблемы. Дошли до простого теста: компилируем минимально рабочий кусок ББ, который использует Finfo, проблема та же.
Если удалить вызов Finfo тест компилируется успешно.
вопрос: что с этим делать?
Поиск даёт в основном три рецепта:
- включить дебаг (самый бесполезный, об этом ниже)
- отключиться от всех typedef и сократить всё по минимуму - не помогло
- очистить кэш компилятора - не помогло
- принудительно добавить в сборку библиотеку - не помогло.
дебаг включаем, компилируется успешно, но программа получается ломанной.
Подключаемся к ней дебагером, и в исходниках видим "всё пропало" в прямом смысле: ни одного саба нет, все как бы потеряны.
Получается, что нельзя использовать сабы класса (не приватные) вне класса при некоторых обстоятельствах?
Ситуация усугубилась после экспорта.
Сначала для проверки концепции в ББ встраивали оригинал А, после успешного теста решили сделать клон А (АА), потому что надо будет немного ковырять АА. И вот после этго всё сломалось. Клон делал автоматом через "сохранить как..."
Вызовы перепроверили три раза. Для надёжности даже на этой машине удалили полностью папку А, так что ББ вызывает только АА, в исходниках всё работает, а в сборке ломается.
Есть идеи или рецепты лечения?