Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1097

 
Seric29:

В качестве параметра передаётся указатель на функцию. Я вижу с классами никто не разобрался как это делать. Мне также до сих пор непонятно зачем нужно возвращать указатель на класс что это даёт.

Вот интересные примеры но это не по моему вопросу

Также в справочнике видел что-то похожее но по закрывал уже эти сайты т.к. руки болят да и работу нужно делать.

Зачем так мудрить в такой простой задаче? Ведь можно просто через объект класса получить нужные данные

Со ссылками, указателями и указателями на функции я знаком, но на деле использую их редко. Да и в целом, как по мне, они нужны только для экономии оперативной памяти - а советники с индикаторами это не игры, поэтому можно обойтись обычными переменными и объектами класса в глобальной области видимости

 
Alexandr Sokolov:

Зачем так мудрить в такой простой задаче? Ведь можно просто через объект класса получить нужные данные

Со ссылками, указателями и указателями на функции я знаком, но на деле использую их редко. Да и в целом, как по мне, они нужны только для экономии оперативной памяти - а советники с индикаторами это не игры, поэтому можно обойтись обычными переменными и объектами класса в глобальной области видимости

На простой задаче мудрить не охота, и конечно я переделываю свои программы где ранее вызывалась функция я пишу арифметическое выражение для облегчение расчётов или перехожу на упрощённую перегружаемую функцию, поэтому и хочется перевести программу на классы. Но как вы выше и написали редко их используете, а теперь вопрос классы есть а создавать указатели на функции этого класса нельзя, зачем такое программирование нужно, если делаешь одно то нельзя делаешь другое то нельзя, это не программирование а чёрт знает что.

 
Seric29:

На простой задаче мудрить не охота, и конечно я переделываю свои программы где ранее вызывалась функция я пишу арифметическое выражение для облегчение расчётов или перехожу на упрощённую перегружаемую функцию, поэтому и хочется перевести программу на классы. Но как вы выше и написали редко их используете, а теперь вопрос классы есть а создавать указатели на функции этого класса нельзя, зачем такое программирование нужно, если делаешь одно то нельзя делаешь другое то нельзя, это не программирование а чёрт знает что.

Класс это шаблон какого-то объекта, и для того чтобы пользоваться функционалом который есть в этом шаблоне - нужно сначала создать объект

По сути дела имя класса выступает в роли типа данных, например как int, double, string и тд. но с расширенным функционалом. Ведь нельзя объявить переменную не указав её тип

Да и к тому всему вы можете просто отвязать функцию от класса и её можно будет использовать в классе и отдельно от класса не создавая объект

 

Может ли быть какая либо другая причина по которой индикатор не работает, за исключением что его файл удалили из соответствующей папки? (индикатор скомпилирован и работает в одном терминале, а в другом не работает)


 
Alexandr Sokolov:

Класс это шаблон какого-то объекта, и для того чтобы пользоваться функционалом который есть в этом шаблоне - нужно сначала создать объект

По сути дела имя класса выступает в роли типа данных, например как int, double, string и тд. но с расширенным функционалом. Ведь нельзя объявить переменную не указав её тип

Да и к тому всему вы можете просто отвязать функцию от класса и её можно будет использовать в классе и отдельно от класса не создавая объект

Ну разве что. Ну просто классы сложная тема, и в справочнике куча примеров по передаче, по созданию ссылок и указателей, я думаю что это возможно (по крайней мере в с++ это возможно но mql4 к c++ отношения никакого не имеет), тут нужно разобраться понять как это работает. В справке приведены эти примеры они очень сложные и перегруженные, вместо того чтобы взять класс и показать простой пример они это перегрузили лишними расчётами и информацией и я не могу понять что они имеют в виду, от усталости и истощения по закрывал я эти все ссылки. Ладно значит буду вытягивать функции из класса.

 
Alexandr Sokolov:

Может ли быть какая либо другая причина по которой индикатор не работает, за исключением что его файл удалили из соответствующей папки? (индикатор скомпилирован и работает в одном терминале, а в другом не работает)


Из маркета?

 
Alexandr Sokolov:

Может ли быть какая либо другая причина по которой индикатор не работает, за исключением что его файл удалили из соответствующей папки? (индикатор скомпилирован и работает в одном терминале, а в другом не работает)


в логе терминала и экспертов смотрите сообщения

Ваш скрин показывает лишь то, что у этого индикатора нет исходника

 
Alexandr Sokolov:

Может ли быть какая либо другая причина по которой индикатор не работает, за исключением что его файл удалили из соответствующей папки? (индикатор скомпилирован и работает в одном терминале, а в другом не работает)


Возможно ему нужны доп библиотеки
 
Сергей Таболин:

Из маркета?

Нет

Igor Makanu:

в логе терминала и экспертов смотрите сообщения

Ваш скрин показывает лишь то, что у этого индикатора нет исходника

Спасибо

MakarFX:
Возможно ему нужны доп библиотеки

Точно нет, я его писал - я бы знал

 

Подскажите пожалуйста почему компилятор выдает предупреждение в следующем MQL4 коде проверочного скрипта:

#property strict

struct st_sig {
   string   sym;           // Symbol
   int      age;           // Bars ago
}; st_sig Signals[];

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart() {

   BubbleSort(Signals);
   
}

//+----------------------------------------------------------------------------+
void BubbleSort(st_sig &sig[]) {
  double t;
  int    i, j, n=ArraySize(sig);

  for (i=n-1; i>0; i--) {
    for (j=0; j<i; j++) {
      if (sig[j].age>sig[j+1].age) {
        t=sig[j].age;
        sig[j].age=sig[j+1].age;
        sig[j+1].age=t;       // Line#27 with warning
      }
    }
  }
}

Предупреждение в строке 27 о несоответствии типов данных. Обе переменные имеют одинаковый тип int. Ниже скриншот компиляции скрипта.

Если же строку 27 заменяю на 

sig[j+1].age=(int)t;

то предупреждение пропадает. 

В чем фокус? 

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