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

 
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:

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

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

 
Ilyas:

Возможно ли в дебагере при показе содержимого структуры иметь возможно удалять из наблюдаемых некоторые ее поля?


Есть несколько больших структур. Нужно глазами сравнивать их по пяти полям. Не получается.

 

Доброго времени суток! Помогите решить проблему.

Перед отправкой и проверкой торгового запроса в MT5-советнике использую следующий вариант определения type_filling:

// тип FILLING
int SYMBOL_FILLING = (int)SymbolInfoInteger(iNameSymbol, SYMBOL_FILLING_MODE);
switch(SYMBOL_FILLING)
{
   case SYMBOL_FILLING_FOK:   iЗапрос.type_filling = ORDER_FILLING_FOK;    break;
   case SYMBOL_FILLING_IOC:   iЗапрос.type_filling = ORDER_FILLING_IOC;    break;
   default:                   iЗапрос.type_filling = ORDER_FILLING_RETURN; break;
}

Но столкнулся с тем, что такая конструкция оказывается работает не на всех счетах, и не у всех брокеров, и после проверки готового запроса через OrderCheck, появляется ошибка 10030 (Указан неподдерживаемый тип исполнения ордера по остатку). При этом SYMBOL_FILLING = 3, и выбирается тип ORDER_FILLING_RETURN.

Каких-либо внешних библиотек (вроде CTrade) не использую. Подскажите или направьте меня пожалуйста туда, где я мог бы получить ответ на свой вопрос.

Заранее спасибо!

 
fxsaber:

Возможно ли в дебагере при показе содержимого структуры иметь возможно удалять из наблюдаемых некоторые ее поля?


Есть несколько больших структур. Нужно глазами сравнивать их по пяти полям. Не получается.

Лучше всего сделать вывод значения любой переменной по наведению на неё мыши в исходнике - так не нужно ничего добавлять в watch-list и поле любой вложенности доступно без цепочки разыменований (и соседних полей).

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