Ошибки, баги, вопросы - страница 2951

 
fxsaber:

Нужно в советнике определить на этапе запуске, запущен он стандартным способом или через шаблон.

Есть мысли по решению этой задачи? 

наверное будет зависеть от области применения

первое, что приходит в голову - программа шпион, какой-нибудь индикатор на чарте, который успеет сказать "ОЙ" во время деинициализации по причине применения шаблона?

или сервис-шпион, который будет отслеживать чарт по ChardID и выводить если на чарте были изменения?...хотя, скорее всего применение шаблонов так не вычислить


ЗЫ: да, еще вариант - если Вы создатель шаблонов, то можно попробовать разобраться, как запускаются MQL-программы прописанные в шаблоне, кто быстрее стартует - индикаторы или эксперт и попробовать из этой MQL-программы делать некие действия означающие применение шаблона, т.е. в одном шаблоне должно быть несколько MQL-программ

 
Igor Makanu:

ЗЫ: да, еще вариант - если Вы создатель шаблонов, то можно попробовать разобраться, как запускаются MQL-программы прописанные в шаблоне, кто быстрее стартует - индикаторы или эксперт и попробовать из этой MQL-программы делать некие действия означающие применение шаблона, т.е. в одном шаблоне должно быть несколько MQL-программ

Интересная идея, спасибо.

 

Зафиксируйте дефект пожалуйста. MQL5 не позволяет в качестве параметров дженериков использовать некоторые встроенные enum'ы, например:  ENUM_CHART_PROPERTY_DOUBLE, ENUM_CHART_PROPERTY_STRING.

С пользовательскими enum'ами и другими встроенными проблем не возникает.

#include <Generic\HashMap.mqh>
enum TEST_ENUM {
   ENUM1, ENUM2
};
void OnStart()
  {
   CHashMap<ENUM_CHART_PROPERTY_INTEGER,int> mapI;    // эта срока компилируется без ошибок
   CHashMap<ENUM_CHART_PROPERTY_DOUBLE,double> mapD;  // здесь ошибки компиляции: 'NULL' - cannot convert enum  HashMap.mqh     21      39. 'NULL' - cannot convert enum        HashMap.mqh     462     30
   CHashMap<ENUM_CHART_PROPERTY_STRING,string> mapS;  // здесь ошибки компиляции: 'NULL' - cannot convert enum  HashMap.mqh     21      39. 'NULL' - cannot convert enum        HashMap.mqh     462     30
   CHashMap<TEST_ENUM,double> mapE;    // эта срока компилируется без ошибок

  }
 
Alexey Rassvetnyy:

Зафиксируйте дефект пожалуйста. MQL5 не позволяет в качестве параметров дженериков использовать некоторые встроенные enum'ы, например:  ENUM_CHART_PROPERTY_DOUBLE, ENUM_CHART_PROPERTY_STRING.

С пользовательскими enum'ами и другими встроенными проблем не возникает.

Проблема возникает из-за отсутствия в enum'е элемента с нулевым значение. Удалось создать свой enum, который порождает эту ошибку компиляции.

#include <Generic\HashMap.mqh>
enum TEST_ENUM {
   ENUM1, ENUM2
};
enum TEST_ENUM2 { //отсутствует элемент с номером 0
   ENUM1=-10, ENUM2
};
void OnStart()
  {
   CHashMap<ENUM_CHART_PROPERTY_INTEGER,int> mapI;    // эта срока комилируется без ошибок
   CHashMap<ENUM_CHART_PROPERTY_DOUBLE,double> mapD;  // здесь ошибки компиляции: 'NULL' - cannot convert enum  HashMap.mqh     21      39. 'NULL' - cannot convert enum        HashMap.mqh     462     30
   CHashMap<ENUM_CHART_PROPERTY_STRING,string> mapS;  // здесь ошибки компиляции: 'NULL' - cannot convert enum  HashMap.mqh     21      39. 'NULL' - cannot convert enum        HashMap.mqh     462     30
   CHashMap<TEST_ENUM,double> mapE;    // эта срока комилируется без ошибок
   CHashMap<TEST_ENUM2,double> mapE2;    // здесь ошибки компиляции: 'NULL' - cannot convert enum       HashMap.mqh     21      39. 'NULL' - cannot convert enum        HashMap.mqh     462     30
  }
 
Alexey Rassvetnyy:

Проблема возникает из-за отсутствия в enum'е элемента с нулевым значение. Удалось создать свой enum, который порождает эту ошибку компиляции.

  В вашем случае поможет исправление файла библиотеки

//+------------------------------------------------------------------+
//| fix HashMap.mqh                                                  |
//|  line 21  | was | Entry(void): key(NULL) {}                      |
//|           | now | Entry(void): key((TKey)NULL) {}                |
//|  line 462 | was | m_entries[i].key=NULL;                         |
//|           | now | m_entries[i].key=(TKey)NULL;                   |
//+------------------------------------------------------------------+
 
DMITRII PECHERITSA:

  В вашем случае поможет исправление файла библиотеки

Благодарю, работает.

Тем не менее если я руками поправлю файл, который поддерживает MQ,  при очередном обновлении мои изменения откатятся. Надо чтобы разработчики, которые поддерживают стандартную библиотеку сделали кастование NULL'ов к параметрическим типам по всему коду стандартной библиотеки или докрутили компилятор, чтобы NULL автоматически мог кастоваться к любому типу без явного указания.

 
Alexey Rassvetnyy:

Надо чтобы разработчики, которые поддерживают стандартную библиотеку сделали кастование NULL'ов к параметрическим типам по всему коду стандартной библиотеки или докрутили компилятор, чтобы NULL автоматически мог кастоваться к любому типу без явного указания.

У разработчиков принцип такой: чем проще, тем лучше. Ну, не ассемблер же, вот и хорошо, вот и пользуйтесь. Оно, может, и так и надо.

 
DMITRII PECHERITSA:

  В вашем случае поможет исправление файла библиотеки

Спасибо за сообщение.

Внёс эти правки в СБ

 
Ilyas:

Спасибо за сообщение.

Внёс эти правки в СБ

Поправили не только для ключей, но и для значений?

 
Stanislav Korotky:

Поправили не только для ключей, но и для значений?

Да, для значений тоже