Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я не пользуюсь import-ом, я включаю файл в тело эксперта напрямую, т.е. через #include
И всё замечательно работает
Пример:
Эксперт
библиотека test_lib.mqh - должна быть в папке include:
зы: пока писАл, заметил: ты int testVar; повторно объявляешь в библиотеке. Её значение и выводилось на принт =)
А влогах ошибки ни какой нет?)
Я не пользуюсь import-ом, я включаю файл в тело эксперта напрямую, т.е. через #include
И всё замечательно работает
Пример:
Эксперт
библиотека test_lib.mqh - должна быть в папке include:
зы: пока писАл, заметил: ты int testVar; повторно объявляешь в библиотеке. Её значение и выводилось на принт =)
Я привёл этот пример как шаблон, что можно сделать чтобы объявить общую переменную и иметь к ней доступ с разных файлов.
Есть ли такой механизм?
Вот скиф предлагает объявить общую переменную в файле .mq4 и включать через #include его везде где, переменная будет использоваться.
И это эквивалент того что в каждом файле объявить эту пеерменную. Я это уже пробовал.
Как вот передавать одну глобальную переменную об]явленную в одном модуле (файле) в другой файл для расчётов в функциях там каких-то
В си бы это я сделал черз extern. А в mql4 он играет другую роль. Делает их как входные параметры эти переменные.
А вообще я понял ваш подход. Но я не хочу влючать один файл c кодом в другой. Поэтому-то и разделил их. Хотел чтобы у меня одни и те же были переменные глобальные, но обособленные а кое какие общие.
Например если обявлю int Var в одном файле и в другом то это будут совсем разные пеерменные. В языка си если в другом файле приписать extern то это сделает переменную общей для модуля где она объявлена и в модуле где она продекларирована с extern int Var.
Я уже склоняюсь к написанию DLL. Хотя скрипт меня по началу устраивал. Но вот эти заморочки
А проблемы я не вижу абсолютно - в тело эксперта включается необходимое кол-во библиотек, и все ф-ции, которые используются в работе видят все переменные, объявленные на гл. уровне.
В чём трабл?)
В чём трабл?)
Вы же используете включаемые файлы исходных текстов. Это - правильный подход, но не надо включаемые исходные файлы называть библиотекой.
SetStringVar(string str) А в другой библиотеке пытаюсь вызвать GetStringVar() и она мне возващается пустую строку или "506" :). Хотя я проинициализировал её c "test_string" в библиотеке, где функции эти объявлены. Хотя, если я вызываю GetStringVar() в главном модуле советника, который импортирует библиотеку с этими функциями, то мне возвращается нормальная строка. С этим сегодня вожусь и не пойму в чём проблема.
А алгоритм включения библиотек по компостеру это всё равно, что пистать все функции и переменные в одном файле. Это простой подход, но тогда все глобальные переменные и функции должны называться уникальным именем иначе не скомпилируется код.
В чём трабл?)
Вы же используете включаемые файлы исходных текстов. Это - правильный подход, но не надо включаемые исходные файлы называть библиотекой.
Например, просто "включаемый файл" )
Если все глоб. перем. собрать в один файл, то его с помощью #include нужно присоединить в головной файл (например, эксперт, содержащий функции) один раз. Объявленные таким образом глоб. переменные будут доступны всем функциям такого эксперта, причём как явно написанным в самом эксперте, так и присоединённым в него с помощью #include. При этом ни в каких функциях эксперта эти переменные объявлять не нужно; они уже доступны, нужно просто к ним обратиться.
Если все глоб. перем. собрать в один файл, то его с помощью #include нужно присоединить в головной файл (например, эксперт, содержащий функции) один раз. Объявленные таким образом глоб. переменные будут доступны всем функциям такого эксперта, причём как явно написанным в самом эксперте, так и присоединённым в него с помощью #include. При этом ни в каких функциях эксперта эти переменные объявлять не нужно; они уже доступны, нужно просто к ним обратиться.
Нет возможности в разных файлах-модулях объявить одноимённую переменную. А такое часто приходится делать, иначе замучаешься придумывать имена переменных, искажая их смысл или приписывать там чёрточки, буковки и прочую билиберду к ним, делая код потом не читабельным для себя самого.
Вот к примеру я хочу сделать две библиотеки сейчас. Названия большинства массивов и переменных и функций в них совпадают, но отличается алгоритм расчётов в этих функциях несколько. И как теперь быть? Переназвать все массивы, глобальные переменные и названия функций. Не удобно!
Если это одна переменная, то она одна. Хоть глобальная, хоть локальная.
Если это другая переменная по сути, то у неё и название другое.
По-моему, это просто.
А не удобно только поначалу. Бывает трудно управляться с большим количеством новых понятий. А когда освоишься, то становится мало..:)
Я не согласен.
Если это одна переменная, то она одна. Хоть глобальная, хоть локальная.
Если это другая переменная по сути, то у неё и название другое.
По-моему, это просто.
А не удобно только поначалу. Бывает трудно управляться с большим количеством новых понятий. А когда освоишься, то становится мало..:)
Поэтому думаю что буду создавтаь код и компилировтать его в DLL. Здесь правда другие проблемы возникают с доступность предопределённых переменных и функций MQL4. Надо посмотреть как в примере. А то придётся думаю всё же делать как скиф и компостер :) Грубо но зато дёшево надёжно и практично :)