Фишка для проекта с большим количеством файлов
В моем проекте более сотни файлов. Все классы оформлены в парах .mqh - .mq5, никогда указанной ошибки не возникало.
У меня гораздо чаще возникает ошибка с перекрестными ссылками, когда два класса используют один другой, и получается, что объявление одного класса должно идти перед объявлением второго, а объявление второго - перед объявлением первого. Частично решает проблему предварительное объявление (forward declaration), однако, все равно, нередко бывает даже с этим предварительным объявлением выскакивает ошибка "неизвестного класса", которая также исправляется при изменении порядка включения файлов в проект.
А "define-скобки" я поначалу использовал, просто, по инерции и по аналогии со своими наработками в кодировании, но понял, что и без них вроде нормально работает.
В моем проекте более сотни файлов. Все классы оформлены в парах .mqh - .mq5, никогда указанной ошибки не возникало.
У меня гораздо чаще возникает ошибка с перекрестными ссылками, когда два класса используют один другой, и получается, что объявление одного класса должно идти перед объявлением второго, а объявление второго - перед объявлением первого. Частично решает проблему предварительное объявление (forward declaration), однако, все равно, нередко бывает даже с этим предварительным объявлением выскакивает ошибка "неизвестного класса", которая также исправляется при изменении порядка включения файлов в проект.
Если по форуму поиском набрать "invalid EXT4 file (8)", будет немало сообщений об этой ошибке. У меня MQL4, а не пятерка, как у вас, и весь класс с методами я кладу в один .mqh.
Не, я не спорю, у меня тоже такая ошибка иногда возникала, и на МТ4 и на МТ5 (я отлаживаю и тестирую советники и индикаторы в МТ5, а использую в МТ4). Но это, насколько я понимаю, не было связано с переобъявлением классов.
Насчет же "кладу в один .mqh" - тут есть разные мнения, к общему, видимо, прийти затруднительно, есть доводы и за вариант с одним файлом, и с двумя.
Не, я не спорю, у меня тоже такая ошибка иногда возникала, и на МТ4 и на МТ5 (я отлаживаю и тестирую советники и индикаторы в МТ5, а использую в МТ4). Но это, насколько я понимаю, не было связано с переобъявлением классов.
Насчет же "кладу в один .mqh" - тут есть разные мнения, к общему, видимо, прийти затруднительно, есть доводы и за вариант с одним файлом, и с двумя.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Обычно большие проекты я разбиваю на классы, каждый класс в своем .mqh файле, которые подключаются примерно так:
#include <MyFolder\MyClass.mqh>
И иногда происходит такая ситуация - когда .mqh фалов много и возникают множественные #include одного и того же файла, компиляция проходит на ура, без варнингов, а при запуске советника мы имеем веселое сообщение "invalid EXT4 file (8)". Причем часто бывает достаточно поменять включаемые файлы местами и ошибка runtime исчезает. То есть, имеет место быть некая трудновоспроизводимая ошибка компилятора или среды исполнения (у меня за все время такое было всего 2 раза).
Я вспомнил один старый прием, который Microsoft практиковала в ранних версия студии и теперь все свои .mqh оформляю, как в коде ниже. Пока, тьфу-тьфу, на эту бяку не напарывался. Смысл в том, что TradeButtons.mqh будет гарантированно включаться в проект только один раз. Не уверен, что проблема в этом, но лишняя защита не повредит.