Классы не работают... - страница 2

 
Viktar Dzemikhau #:

Вадим, в том то и дело, что всё компилируется. И методы работают. Но... писать то не удобно, когда методы не всплывают при написании. Идиотизм какой-то. Неужели такое не только у меня? Кидал эти 2 небольших класса (остальные которые огромные не переносил) в другой метаэдитор, и, там такая же хрень творится. Код компилится, методы рабочие, а писать не выходит нормально.

Возникает вопрос, как быть? Вроде бы же уже финальный релиз был. А толку? 

Говорите, кодить не удобно? Это действительно проблема. Я, например, использую для этого Notepad++ c подсветкой синтаксиса, которую создал сам (ниже покажу). В этом редакторе есть ОЧЕНЬ много такого, чего реально не хватает в Метаэдиторе. Что же касается Вашего случая, можно попробовать подключить модуль MQL к оболочке Microsoft Visual Studio. Только не Visual Studio Code, хотя, я лично знаю человека, который аж в восторге от него - говорит, что это лучшая оболочка для программирования на MQL. Мне со старта настроить не удалось и я удалил её с компа. А вот  Microsoft Visual Studio настраивается куда проще и поддержку синтаксиса MQL поддерживает. Ну, и + удобства. Так что можно попробовать. Хотя, как по мне, я привык к Notepad++. А вот обещанная подсветка в нём.

 

 
Ihor Herasko #:

Еще можно создать специальный публичный метод класса:

Тут я перенес param1 и param2 в приватную секцию. А то они были общедоступны и их значения можно было изменять напрямую извне. 

Также часто практикуется (я бы даже сказал: рекомендуется) создавать экземпляр класса в процессе выполнения кода:

Подскажите пожалуйста как в этом примере pGraf объявить массивом, чтоб можно было использовать несколько однотипных экземпляров.

 
Ruslan Piraliyev #:

Подскажите пожалуйста как в этом примере pGraf объявить массивом, чтоб можно было использовать несколько однотипных экземпляров.

Это делается аналогично обычным массивам:

CGraphical  *pGraf[];

...

ArrayResize(pGraf, nMyArraySize);

for (int i = 0; i < nMyArraySize; ++i)
        pGraf = new CGraphical(i * 3, i * 4);

В примере нужно задать свой размер массива (nMyArraySize). Также для примера каждому из экземпляров класса передаются свои значения параметров param1 и param2.

 
Ihor Herasko #:

Это делается аналогично обычным массивам:

В примере нужно задать свой размер массива (nMyArraySize). Также для примера каждому из экземпляров класса передаются свои значения параметров param1 и param2.

То что разные параметры можно передавать экземплярам одного массива это здорово, спасибо! Только там pGraf в цикле вроде должен быть с элементом массива т.е.  pGraf[i].

 
Ruslan Piraliyev #:

То что разные параметры можно передавать экземплярам одного массива это здорово, спасибо! Только там pGraf в цикле вроде должен быть с элементом массива т.е.  pGraf[i].

Да, не дописал. Правильно так:

CGraphical  *pGraf[];

...

ArrayResize(pGraf, nMyArraySize);

for (int i = 0; i < nMyArraySize; ++i)
        pGraf[i] = new CGraphical(i * 3, i * 4);
 
Ihor Herasko #:

Да, не дописал. Правильно так:

Да, еще раз благодарю за помощь. Столько вариантов и нюансов загрузки классов, но и возможностей соответственно много появляется 👍

 
Vitaly Murlenko #:

Говорите, кодить не удобно? Это действительно проблема. Я, например, использую для этого Notepad++ c подсветкой синтаксиса, которую создал сам (ниже покажу). В этом редакторе есть ОЧЕНЬ много такого, чего реально не хватает в Метаэдиторе. Что же касается Вашего случая, можно попробовать подключить модуль MQL к оболочке Microsoft Visual Studio. Только не Visual Studio Code, хотя, я лично знаю человека, который аж в восторге от него - говорит, что это лучшая оболочка для программирования на MQL. Мне со старта настроить не удалось и я удалил её с компа. А вот  Microsoft Visual Studio настраивается куда проще и поддержку синтаксиса MQL поддерживает. Ну, и + удобства. Так что можно попробовать. Хотя, как по мне, я привык к Notepad++. А вот обещанная подсветка в нём.

 

Notepad++ штука отличная по многим причинам. Но для всего свой инструмент. Иногда я прибегаю к нему при написании кода, но.. это не панацея. Косяк в том, что компилировать там нельзя. К тому же, я на 4-ке уже не пишу, в основном. Так вот, в 5-ке я использую тёмную тему и меня это уже устраивает. Конечно, по сравнению с Intelij Idea, которую я использую для других задач, метаэдитор убог, но вариантов нет.  Notepad++ точно не вариант для меня. Писать в  Notepad++, а компилировать в метаэдиторе - извращенство. Это лишь моя точка зрения. Каждому своё. Я не спорю. Кому то это нормально.

Но у меня пачка кастомных классов, библиотек, структур и тд. Это всё объеденить воедино при помоще  Notepad++..? Нет. Не моё..))

 
Viktar Dzemikhau #:

Notepad++ штука отличная по многим причинам. Но для всего свой инструмент. Иногда я прибегаю к нему при написании кода, но.. это не панацея. Косяк в том, что компилировать там нельзя. К тому же, я на 4-ке уже не пишу, в основном. Так вот, в 5-ке я использую тёмную тему и меня это уже устраивает. Конечно, по сравнению с Intelij Idea, которую я использую для других задач, метаэдитор убог, но вариантов нет.  Notepad++ точно не вариант для меня. Писать в  Notepad++, а компилировать в метаэдиторе - извращенство. Это лишь моя точка зрения. Каждому своё. Я не спорю. Кому то это нормально.

Но у меня пачка кастомных классов, библиотек, структур и тд. Это всё объеденить воедино при помоще  Notepad++..? Нет. Не моё..))

Notepad++ прекрасно расширяется плагинами и позволяет компилировать открытый файл (даже в журнал ошибки выводит и по клику на них подсвечивает нужные места в коде):

Можно расписать несколько профилей компиляции (для MQL4 отдельно, для MQL5 отдельно, к примеру):

Также, можно не только использовать навигатор по файловой структуре (которую задать от какого-то нужного расположения, например, папки MQL5), но и собирать структуру "проекта", что позволяет быстро открывать нужные файлы. В общем, не стоит на Notepad++ ставить крест. Даже пользователям линукса (как я), т.к. N++ отлично работает через wine. Нужный файл справки открывать при нажатии F1 он тоже умеет. Не хватает только отладки и профилирования. Ну это не так уж часто нужно, можно и в MetaEditor ненадолго вернуться.

Причина обращения: