А если я их объявлю в .cpp, то они только там видны и будут. Как это разрулить так, чтобы было типа
CItem TYPE_STRING_ID_ITEM( 0x0001, 0, 4, "string_id_item"); и этот TYPE_STRING_ID_ITEM был доступен из других модулей
private final double mass; // in kilograms
private final double radius; // in meters
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
А нечто подобное описанному я уже сляпал... Это-то очевидно.
А если я их объявлю в .cpp, то они только там видны и будут. Как это разрулить так, чтобы было типа
CItem TYPE_STRING_ID_ITEM( 0x0001, 0, 4, "string_id_item"); и этот TYPE_STRING_ID_ITEM был доступен из других модулей
В Си и C++ существует такое понятие, как "единица компиляции"04.06.19 19:17 Автор: Den <Денис Т.> Статус: The Elderman Отредактировано 06.06.19 11:31 Количество правок: 1
То, что объявлено внутри единицы компиляции, существует только там, а из других единиц компиляции ты можешь получить доступ к тому, что объявил через включение.
Заголовочные файлы также являются единицами компиляции и если ты объявил как static с инициализацией некий синглетон, то к нему, так или иначе, можно получить доступ. Например, в заголовочном файле ты можешь объявить:
---
Экземпляр как переменной типа TYPE_STRING_ID_ITEM, так и возвращающей ссылку на неё функции, находящихся в заголовочном файле, будет только один для всех .cpp файлов, что будут включать этот заголовочный файл.
Хорошую вещь начал, но сил не хватило закончить...24.08.20 04:06 Автор: Zef <Alloo Zef> Статус: Elderman
Уже и забыл, что делал! А делал-то ведь Dex-едитор на С.
Суть, родная гугловая либа сборки-разборки Dex-файлов спотыкается на загогулинах порождаемых обфускатором. Разобрать можно, посмотреть можно, а собрать обратно - хрен! А, если патчить не разбирая? Как ехе-шники патчат в гексе? Надо только разобрать поля Dexа по полочкам, найти, декомпилить и поправить нужный фрагмент. Вот, это я сделать и хотел, для чего и пытался Dex-либу портировать в С, да малость вспотел...
как с любой другой переменной21.02.19 19:12 Автор: dl <Dmitry Leonov>
> А если я их объявлю в .cpp, то они только там видны и > будут. Как это разрулить так, чтобы было типа > CItem TYPE_STRING_ID_ITEM( 0x0001, 0, 4, "string_id_item"); > и этот TYPE_STRING_ID_ITEM был доступен из других модулей
Инициализировать в одном файле, в другом объявлять как extern.
Хвост древнего С20.01.19 05:45 Автор: Zef <Alloo Zef> Статус: Elderman Отредактировано 20.01.19 05:46 Количество правок: 1
Разобрался в чем дело: это хвост дообъектной эры. Компоновщик умеет предотвращать повторные объявления переменных при многократном инклюде хедера, но не умеет предотвращать повторную инициализацию. Потому можно объявлять в хедере только те объекты, у которых конструктор не имеет параметров. Хреново...