Краудсорсовый GUI. Открытое бета-тестирование. - страница 48
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Петр, ты ко мне можешь относиться как угодно, это твое право, но послушай совета чуть более опытного товарища.
Первым в коде подключается файл GUI_DRIVE.mqh. Перед ним ничего не объявлено.
Если его компилировать самостоятельно то он выдаст ошибку отсутствия G_CORE, и это логично так как массив в этом файле не объявляется!
Вывод? Ну тут вывод элементарный: данный массив нужно объявить именно в этом файле. В конечном итоге именно этот файл и работает с этим массивом, ведь этот файл и есть "движок"! Поэтому объявление в нем самого массива является правильным, по контексту использования.
В следующем файле, CORES.mqh , производится заполнение самого массива описанием элементов формы.
Конечно при компиляции самого советника с этими файлами, если массив будет объявлен в первом файле, проблем компиляции не будет так как при компиляции второго файла массив уже будет виден контексту программы.
Но мы говорим о том, что каждый файл должен компилироваться без ошибок. Поскольку во втором файле массив G_CORE заполняется элементами то вполне естественно мы нарвемся на ошибку при компиляции этого файла если не объявим массив.
И вот тут используем, как сказал Александр, заглушку.
Петр, ты на дефайнах "собаку съел" так что поймешь сразу в чем фишка.
В файле GUI_DRIVE объявляешь глобальный массив ядра элементов G_CORE, после этого файл должен компилироваться без ошибок.
Далее в этом файле добавляешь дефайн
#define __DRIVE__
Переходим к файлу Cores. Прежде чем объявить массив используй препроцессор компиляции
А потом заполняешь уже сам массив. Конечно тебе придется немного изменить способ заполнения массива, сделать это без объявления.
Я думаю ты уловил суть: если компилируется файл CORES, то дефайна __DRIVE__ нет и компилируется код объявления массива и далее все отрабатывает штатно.
Если файл компилируется в составе советника, тогда после компиляции первого подключенного файла объявляется дефайн и во втором файле объявление массива не происходит так как компилятор "вырежет" этот кусок кода.
Очень надеюсь что пояснил внятно.
Повторю еще раз: каждый файл должен компилироваться без ошибок. Если есть зависимости, то нужно правильно предусмотреть их расположение и добавить при необходимости процессоры перекомпиляции.
Когда каждый из файлов у тебя компилируется без ошибок, тогда больше уверенности в целостности всей системы.
И еще не забывай в каждом файле добавлять свойство:
Это свойство дает более жесткую проверку кода.
Да, с помощью манипуляций с препроцессором можно сделать так, чтобы каждый файл компилировался по отдельности без ошибок.
Тут некоторые товарищи пишут делают отдельный софт который немного изменяет интерфейс самого метаедитора - для удобства использования лишь!
Этот стандарт все равно что использовать клавиатуру - вместо того чтобы набирать буквы по азбуке морза через пищялку. Заглушки ничего кроме постоянного перелистования между файлами при компиляции не чего не меняет. Но заглушка это 2 строчки кода. А сколько времени потратим на это перелистование для того чтобы просто нажать одну кнопку. И сколько раз будем так листать 7 и что становиться рациональнее дабы не тратить жизнь на набивания букв через пищалку
Заметь сейчас речь не идет ни о объектах ни о классах а просто о экономии времени. Своем времени.. Причем стандарт их написания можешь сам придуматьЯ уж не говорю про кодирование на русском, которое по умолчанию дискриминируется англоязычной средой разработки. Тоже приспосабливаться и оставить своему мозгу жалкие 30% производительности, в то время, как на русском могу использовать все 100%?
В проф коде част используют свои типы данных. Вобще пофигу на каком языке они.
Но если функция ожидает целое число в таком порядке: Примем (ширина, высота).
А в место этого мы случайно перепутали и написали
Примем (высота, ширина) - то сам копилятор говорит о том что у нас тут перепутано. Работает ли это у Вас - тут тоже речь ни о языке и ни объектах. А просто о том чтобы потом не выискивать эту ошибку самому
В проф коде част используют свои типы данных. Вобще пофигу на каком языке они.
Но если функция ожидает целое число в таком порядке: Примем (ширина, высота).
А в место этого мы случайно перепутали и написали
Примем (высота, ширина) - то сам копилятор говорит о том что у нас тут перепутано. Работает ли это у Вас - тут тоже речь ни о языке и ни объектах. А просто о том чтобы потом не выискивать эту ошибку самому
Петр, ты ко мне можешь относиться как угодно, это твое право, но послушай совета чуть более опытного товарища.
.......
И еще не забывай в каждом файле добавлять свойство:
Это свойство дает более жесткую проверку кода.
это под пятёрку сделано - там всегда strict!
хотя в целом согласен: куча предупреждений при компиляции не повышает доверия к коду.
это под пятёрку сделано - там всегда strict!
хотя в целом согласен: куча предупреждений при компиляции не повышает доверия к коду.